【问题标题】:Iterate through JSON data in Django template遍历 Django 模板中的 JSON 数据
【发布时间】:2017-09-15 19:58:34
【问题描述】:

我在遍历一些我设法导入到我的 Django Wagtail 项目中的 JSON 数据时遇到问题。我想在从这里拉入的网站上列出旅行建议:http://data.international.gc.ca/travel-voyage/index-updated.json

我能够在我的模型中这样做:

import requests

def get_context(self, request):
    response = requests.get('http://data.international.gc.ca/travel-voyage/index-updated.json')
    json_response = response.json()

    data = json_response['data']

    context = super(TravelAdvisoriesPage, self).get_context(request)
    context['data'] = data

    return context

我现在不确定如何将数据导入我的模板。我可以使用{{ data }} 提取所有数据。

但是如何从 JSON 数据中提取特定项目?我想同时获取英文和法文名称、url-slug、advisory-text 等。所有这些都嵌套在 JSON 结构中的 data > country code > language > item 中。

我尝试过类似的方法:

{% for country in data %}
  {{ data[country].eng.name }}<br />
{% endfor %}

这给了我像Could not parse the remainder: '[country].eng.name' from 'data[country].eng.name' 这样的错误。你如何在模板中抓取这些?

【问题讨论】:

    标签: python json django wagtail


    【解决方案1】:

    Django 模板有自己的语法,不同于 Python 语法。您在 {{ data[country].eng.name }} 中使用的括号表示法是不允许的。使用 items 字典函数来迭代 dict 键和 dict 值:

    {% for country_key, country_value in data.items %}
      {{ country_value.eng.name }}<br />
    {% endfor %}
    

    【讨论】:

    • 谢谢!这确实吸引了名字。不过,带连字符的项目似乎仍然存在问题。 friendly-date 不起作用,因为它无法解析剩余的“-date”。
    • 不幸的是,解决这个问题并不容易。最好的解决方案可能是custom template tag
    猜你喜欢
    • 2017-08-13
    • 2016-08-13
    • 2018-02-24
    • 2011-07-16
    • 2018-05-24
    • 2016-11-12
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多