【问题标题】:Django: how to loop through nested Json object in htmlDjango:如何遍历 html 中的嵌套 Json 对象
【发布时间】: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 问题。我忘了指定它。对不起

标签: html json 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”属性
    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2021-07-30
    相关资源
    最近更新 更多