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 对象的主要内容,如果未能解决你的问题,请参考以下文章

尝试遍历 django 模板中的嵌套字典

循环遍历 Django 模板中的嵌套字典

Django模板访问嵌套数据

使用 KnockoutJs 遍历嵌套的 Django REST Framework API

在javascript中循环遍历python-dictionary-turned-into-json

使用 Django 的 ORM 和 Django Rest Framework 序列化嵌套关系的查询集的正确方法?