【问题标题】:Accesing to JSON nested values (arrays) from Django templates从 Django 模板访问 JSON 嵌套值(数组)
【发布时间】:2017-04-12 20:14:45
【问题描述】:

我有以下JSON 文档,其结构如下:

{
  "paciente": {
    "id": 1234,
    "nombre": "Pablo Andrés Agudelo Marenco",
    "sesion": {
      "id": 12345,
      "juego": [
        {
          "nombre": "bonzo",
          "nivel": [
            {
              "id": 1234,
              "nombre": "caida libre",
              "segmento": [
                {
                  "id": 12345,
                  "nombre": "Hombro",
                  "movimiento": [
                    {
                      "id": 1234,
                      "nombre": "Flexion",
                      "metricas": [
                        {
                          "min": 12,
                          "max": 34,
                          "media": 23,
                          "moda": 20
                        }
                      ]
                    },
                    {
                      "id": 12345,
                      "nombre": "Extensión",
                      "metricas": [
                        {
                          "min": 12,
                          "max": 34,
                          "media": 23,
                          "moda": 20
                        }
                      ]
                    }
                  ]
                },
                {
                  "id": 12345,
                  "nombre": "Escápula",
                  "movimiento": [
                    {
                      "id": 1234,
                      "nombre": "Protracción",
                      "metricas": [
                        {
                          "min": 12,
                          "max": 34,
                          "media": 23,
                          "moda": 20
                        }
                      ]
                    },
                    {
                      "id": 12345,
                      "nombre": "Retracción",
                      "metricas": [
                        {
                          "min": 12,
                          "max": 34,
                          "media": 23,
                          "moda": 20
                        }
                      ]
                    }
                  ]
                }
              ],
              "___léeme___": "El array 'iteraciones' contiene las vitorias o derrotas con el tiempo en segundos de cada iteración",
              "iteraciones": [
                {
                  "victoria": true,
                  "tiempo": 120
                },
                {
                  "victoria": false,
                  "tiempo": 232
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

有时,segmento 数组

"paciente": ...
   "sesion": ...
       "juego": ...
           **"segmento":[{"id": ...,"nombre":...},{"id": ...,"nombre":...},{"id": ...,"nombre":...}]** 

有超过一个值,两个,三个,直到四个值,包括或不包括所有值。

我应该通过以下方式在 Django 模板中显示这些 segmento.nombre 值:

每个segmento.nombre 值我应该在我的模板中的一个标签html div 中显示它,例如:

如果在我的JSON 文档中我只将两个值读入segmento 数组...

{
  "segmento": [{
    "id": 12345,
    "nombre": "Escapula",
  }, {
    "id": 12345,
    "nombre": "Hombro",
  }]
}

然后,我应该在模板中将这两个值显示为:

我阅读了 JSON 文档

<code> ...
with open('ProcessedMetrics.json') as data_file:
            session_data=json.loads(data_file.read())
            context['session_data'] = session_data
<code> ...

在我的模板中,我正在执行以下操作:

<!-- jugar con los ciclos del segmento, movimiento -->
<div class="box-body">

  <!-- begin corporal segments tabs -->
  <div class="nav-tabs-custom">
    {% for nest1 in session_data.paciente.sesion.juego %}
        {% for nest2 in nest1.items %} <!-- get all games (juego array)-->
            {%for nest3 in nest2%}
                <ul class="nav nav-tabs">
                    <li class="active">                                  
                        <a href="#mano" data-toggle="tab" aria-expanded="true"><i class="fa fa-check-square">{{nest3}}</i> 
                                            </a></li>   

            {%endfor%}    
        {%endfor%}    
    {%endfor%}    
                    <li><a href="#codo" data-toggle="tab" aria-expanded="false"><i class="fa fa-check-square"></i> other tab hardcoded</a></li>
                </ul>

到目前为止我得到的结果是:

我在转发nivelsegmento 数组时遇到问题... 我不知道如何以最佳方式访问嵌套元素

谁能给我指点一下,思路是根据segment数组的值个数生成标签

非常感谢您的支持

【问题讨论】:

  • 你真的应该在Python中处理庞大的JSON结构,并尽可能保持模板中的代码简单。
  • 从这个意义上说,将 JSON 转换为字典并将其发送到模板可能是一种选择吗?
  • 您已经这样做了(json.loads 将 JSON 转换为字典)。我会创建一个 Python 函数,该函数接受该字典并返回最容易在模板中使用的确切格式,然后从视图中调用该函数。

标签: python arrays json django


【解决方案1】:

这个答案是在其他论坛上与我分享的,我添加了选项卡,它与 JSON 中的 segment 值相关。

关键在于标签 uldiv 中的标签 href 标识符,我在其中创建了标签以及与部署这些标签内容的 div id 的相关性。

这样我也知道这是否是最好的选择。

<div class="box-body">
    <!-- begin corporal segments tabs -->
        <div class="nav-tabs-custom">
            <ul class="nav nav-tabs">
                {% for nest1 in session_data.paciente.sesion.juego %}
                    {% for nest2 in nest1.nivel %} 
                        {%for nest3 in nest2.segmento%}
                            <li><a href="#{{nest3.nombre}}" data-toggle="tab" aria-expanded="true"><i class="fa fa-check-square"></i> {{nest3.nombre}}</a></li>
                        {%endfor%}
                    {%endfor%}
                {%endfor%}    
            </ul>
<!--- Content of tabs generated above -->                                   
<div class="tab-content">
    {% for nest1 in session_data.paciente.sesion.juego %}
        {% for nest2 in nest1.nivel %}
            {%for nest3 in nest2.segmento%}

            <!-- /.tab-pane  Correlation with href tab above-->

                <div class="tab-pane" id="{{nest3.nombre}}">
                <!-- The timeline -->
                    <div class="box-body table-responsive no-padding">
                       .... More code ....
                    </div>
               </div>
        ......
 </div>

这样做我可以根据JSON读取中我的segmento键中的值的数量生成一个特定的选项卡编号,并将其与这些选项卡关联到它们各自的内容...

如果有人对此有更好的选择,请发表评论!! 例如最好不要在我的模板中执行很多循​​环,这是在客户端旁边处理,真的吗?

我可以在我的视图中读取 json,上交字典,对他们的数据进行一些处理并将它们发送到我的模板吗?

谢谢

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    相关资源
    最近更新 更多