Python 根据Django模板中的JSON嵌套值(数组)
我有以下带有下一个结构的Python 根据Django模板中的JSON嵌套值(数组),python,arrays,json,django,Python,Arrays,Json,Django,我有以下带有下一个结构的JSON文档: { "paciente": { "id": 1234, "nombre": "Pablo Andrés Agudelo Marenco", "sesion": { "id": 12345, "juego": [ { "nombre": "bonzo", "nivel": [ { "id": 1234
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>
{会话_data.paciente.sesion.juego%}
{nest1.items%}
{nest2%中nest3的%
-
{%endfor%}
{%endfor%}
{%endfor%}
目前为止,我得到的结果是:
我在转发nivel
或segmento
数组时遇到问题。。。
我不知道如何以最佳方式访问嵌套元素
有人可以告诉我,这个想法是根据segment
array的值的数量来生成选项卡
我非常感谢您的支持这个答案在其他论坛上与我分享,我添加了标签,它与JSON中的
段
值相关
键位于ul
和div
中的选项卡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>
{会话_data.paciente.sesion.juego%}
{nest1.nivel%}
{nest2.segmento%}
{%endfor%}
{%endfor%}
{%endfor%}
{会话_data.paciente.sesion.juego%}
{nest1.nivel%}
{nest2.segmento%}
.... 更多代码。。。。
......
这样,我可以根据JSON读取中mysegmento
键中的值数量生成特定的选项卡编号,并将其与这些选项卡关联到各自的内容
如果有人有更好的选择,请评论!!
例如,最好不要在我的模板中执行许多循环,这是在客户端旁边处理的,真的吗
我可以在我的视图中读取json,打开字典,对它们的数据进行一些处理并将它们发送到我的模板吗
谢谢您真的应该在Python中处理庞大的JSON结构,并使模板中的代码尽可能简单。从这个意义上说,将JSON转换为字典并将其发送到模板可能是一种选择吗?您已经这样做了(JSON.loads将JSON转换为字典)。我将创建一个Python函数,该函数接受该字典并返回在模板中最容易使用的确切格式,然后从视图中调用该函数。