【问题标题】:Jinja2 - How to loop a json list?Jinja2 - 如何循环一个 json 列表?
【发布时间】:2015-11-12 04:16:14
【问题描述】:

如何使用 jinja2 循环一个 json 列表?

我有这个 json 列表,

[
    {
        "first_name": "John",
        "last_name": "Smith",
        "user_id": 4,
        "address": null
    },
    {
        "first_name": "Jane",
        "last_name": "Heart",
        "user_id": 5,
        "address": null
    },
    {
        "first_name": "Dom",
        "last_name": "Robinsons",
        "user_id": 6,
        "address": null
    },
    {
        "first_name": "Pete",
        "last_name": "Hand",
        "user_id": 7,
        "address": null
    }
]

page.html,

<table>
   {% for user in users %}
   <tr><td>{{ user.first_name }}</td></tr>
   {% endfor %}
</table>

结果,

<table>

   <tr><td></td></tr>

   <tr><td></td></tr>

   <tr><td></td></tr>

   <tr><td></td></tr>
   ...

有什么想法吗?

【问题讨论】:

    标签: json python-2.7 jinja2


    【解决方案1】:

    jinja2 中的简单 json 迭代

    <table>
       <tr>
           {% for key in users[0] %}
           <th>{{ key }}</th>
           {% endfor %}
       </tr>
    
       {% for user in users %}
       <tr>
           {% for key in user %}
           <td>{{ user[key] }}</td>
           {% endfor %}
       </tr>
       {% endfor %}
    </table>
    

    【讨论】:

      【解决方案2】:

      您的 json 列表包含字典;您需要以不同于类成员的方式访问字典元素;试试:

      <tr><td>{{ user['first_name'] }}</td></tr>
      

      这对我有用(python 3.4 和 python 2.7)

      import json
      from jinja2 import Template
      
      json_str = '''[{"first_name": "John", "last_name": "Smith", "user_id": 4, 
          "address": null}, {"first_name": "Jane", "last_name": "Heart",
          "user_id": 5, "address": null}, {"first_name": "Dom",
          "last_name": "Robinsons", "user_id": 6, "address": null},
          {"first_name": "Pete", "last_name": "Hand", "user_id": 7,
          "address": null}]'''
      
      users = json.loads(json_str)
      
      tmpl = Template('''
      <table>
         {% for user in users %}
         <tr><td>{{ user['first_name'] }}</td></tr>
         {% endfor %}
      </table>
      ''')
      
      print(tmpl.render(users = users))
      

      输出:

      <table>
      
         <tr><td>John</td></tr>
      
         <tr><td>Jane</td></tr>
      
         <tr><td>Dom</td></tr>
      
         <tr><td>Pete</td></tr>
      
      </table>
      

      【讨论】:

      • you json list contains dictionaries - 什么是字典?我的意思是如何识别数据/json 包含字典。
      • 字典是一个键值集合。在蟒蛇中; d = {key: value}.
      • 它也是一个json,不是吗?像这个 - {"key": "value"} 不是 json 吗?
      • jinja2 无法解析 json,没有。它将任何形式的 python 对象作为参数(在您的情况下为字典列表)。但您必须先将 json 字符串转换为该字符串。这就是 json 模块为您所做的(这里的一个可见转换是 hte json 字符串 'null' 映射到 python None)。
      • 好吧 json.loads 将字符串转换为 python 对象(尽可能好)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多