使用Python3和jinja2从嵌套的Json响应获取信息

使用Python3和jinja2从嵌套的Json响应获取信息,python,jinja2,Python,Jinja2,我正在通过一些JSON和python来寻找关于itering的帮助 目前我有一个函数,它指向一个URL,这是一个JSON API,获取JSON并将结果呈现为results.html。在results.html中,我使用jinja2和for循环来获取一些信息。我可以从_id和文本中获取信息,但是我想做的是从用户部分获取信息(参见下面的JSON示例) 结果.py @app.route("/results/") def results(): catfactsURl = "

我正在通过一些JSON和python来寻找关于itering的帮助

目前我有一个函数,它指向一个URL,这是一个JSON API,获取JSON并将结果呈现为results.html。在results.html中,我使用jinja2和for循环来获取一些信息。我可以从_id和文本中获取信息,但是我想做的是从用户部分获取信息(参见下面的JSON示例)

结果.py

@app.route("/results/")
def results():
catfactsURl = "https://cat-fact.herokuapp.com/facts/"
webUrl = urllib.request.urlopen(catfactsURl)
if(webUrl.getcode() == 200):
    data = json.loads(webUrl.read())
    return render_template("results.html", data=data['all'], title="Results")
else:
    print("Received error, cannot parse results")
Results.html

{% extends 'layout.html' %}

{% block title %}{{title}}{% endblock %}

{% block content %}
<div>
   {% for datas in data %}
   <span>{{ datas['_id'] }}</span>
   <p>{{ datas['text'] }} </p>
   <p>{{ datas['user'] }}</p>
   {% endfor %}
</div>

该数据源在其中一个条目(58e008450aac31001185ecfd)中缺少“用户”键。首先通过检查用户密钥的存在来绕过它

<div>
{% for datas in data %}
    <span>{{ datas['_id'] }}</span>
    <p>{{ datas['text'] }} </p>
    {% if 'user' in datas.keys() %}
        <p>{{ datas['user']['name']['first'] }} {{ datas['user']['name']['last'] }}</p>
    {% endif %}
{% endfor %}
</div>

{%用于数据%中的数据}
{{datas['''u id']}
{{datas['text']}

{%if'user'在datas.keys()中%} {{datas['user']['name']['first']}{{datas['user']['name']['last']}

{%endif%} {%endfor%}
HI@FLSte,不幸的是,这不起作用,因为我在尝试指定信息时遇到了以下错误(即{datas['user']['name']['first']}{{datas['user']['name']['last']}

):jinja2.exceptions.undeinderror:'dict object'没有属性'user',我查看了数据源。1条记录缺少“用户”属性。更新的答案。谢谢@FLSte这对我有用。刚开始学这东西,真的帮了我大忙。
<div>
{% for datas in data %}
    <span>{{ datas['_id'] }}</span>
    <p>{{ datas['text'] }} </p>
    {% if 'user' in datas.keys() %}
        <p>{{ datas['user']['name']['first'] }} {{ datas['user']['name']['last'] }}</p>
    {% endif %}
{% endfor %}
</div>