从Django模板访问JSON嵌套值(数组)

时间:2016-11-29 00:01:02

标签: python arrays json django

我有以下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",
  }]
}

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

enter image description here

我读了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>

直到那一刻我得到的结果是:

enter image description here

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

有人可以指导我,我的想法是根据segment数组

的值数生成制表符

我非常感谢您的支持

1 个答案:

答案 0 :(得分:1)

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

密钥位于hreful中的标签div标识符中,我在其中创建了标签以及与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,上交字典,使用他们的数据进行处理并将其发送到我的模板吗?

由于