Django:如何遍历 html 中的嵌套 Json 对象
Posted
技术标签:
【中文标题】Django:如何遍历 html 中的嵌套 Json 对象【英文标题】:Django: how to loop through nested Json object in html 【发布时间】:2019-01-07 03:24:57 【问题描述】:我是 json 新手,我在 django view.py 中有一个名为 jresult 的嵌套 json 对象。我将此对象传递给 html,我想在 html 中显示它。
在 view.py 中:
return render(request,'home.html', 'jresult': jresult)
结果:
"company": "xxx",
"address": "xxx",
"ceo": "xxx,
"employee":
"Emily":
"id": "xxx",
"gender": "xxx"
,
"Tom":
"id": "xxx",
"gender": "xxx"
,
"Alex":
"id": "xxx",
"gender": "xxx"
,
,
到目前为止,我只能循环遍历员工的姓名并将其显示在 html 页面中:Emily、Tom 和 Alex,通过以下 html 代码:
% for obj in jresult.employee %
<p>obj</p>
% endfor %
我如何也可以访问 id 和性别,我已经尝试过
% for obj in jresult.employee %
<p>obj</p>
% for item in jresult.employee.obj.gender %
<p>item</p>
% endfor %
% endfor %
但它不起作用。 任何帮助将不胜感激。
【问题讨论】:
看起来像django
。如果您更改您的问题和标签以包含您正在使用的解释该语法的模板,您将会有更好的运气。
可以和Jinja差不多的还是Jinja(django的模板引擎)或者Twig(php模板引擎),你要指定是哪一个
是的。这是一个 django 问题。我会马上更新
@Norman 是的。这是一个 django 问题。我忘了指定它。对不起
【参考方案1】:
您可以执行 jresult['employee']['Emily'] 然后使用点符号打印剩余的
jresult['employee']['Emily'].gender
如果我没记错的话,那应该打印性别。但是,这是不可维护的,因为它要求您在打印之前知道每个键的名称。
Django 模板应该允许你做这样的事情,因为 json 应该被视为 python 字典。
% for employee_key, employee_value in jresult.employee %
<p>employee_key:employee_value</p>
% endfor %
参考:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/#for
除此之外 - 我可能只是编写一个序列化器/转换器来将这些数据更改为模板可读,然后再将其发送到前端。
希望这会有所帮助!
【讨论】:
【参考方案2】:JSON 是一种嵌套结构,因此您应该能够使用简单的点表示法访问相关对象的属性。如果您想像这样遍历它们,则必须将 employee
字段作为数组而不是对象:
试试这个:
% for obj in jresult.employee %
<p>obj</p>
<p>obj.id</p>
<p>obj.gender</p>
% endfor %
【讨论】:
谢谢,但只显示员工姓名,不显示id和性别 啊抱歉,我刚刚意识到employee
是一个对象而不是一个数组。这就是你的问题所在。您不能遍历一个充满对象的对象。但是你可以遍历一个对象数组。
@zubhav,请看我的回答,你绝对可以遍历一个充满对象的对象:)。 JSON 对象应被视为 python 字典。请看docs.djangoproject.com/en/2.0/ref/templates/builtins/#for【参考方案3】:
看看this(类似请求)或者(如果它不起作用)你可以实现your own filter以将json转换为所需的形式
编辑: 基本上你可以试试
jresult['employee']
因为在第一个链接中引用,您在 json 中有字典
【讨论】:
我检查了它,但我的情况是没有 Alex、Tom 和 Emily 的属性名称。我不知道如何访问它们 在 jresult 中我看不到员工的属性“名称”,他们的名字是键,您可以将“员工”字段转换为字典列表,其中列表中的每个字典代表一个员工(所以你可以循环遍历列表)并且在每个字典中你可以添加“name”属性以上是关于Django:如何遍历 html 中的嵌套 Json 对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 KnockoutJs 遍历嵌套的 Django REST Framework API