【问题标题】:Accessing JSON data in template in Django在 Django 中访问模板中的 JSON 数据
【发布时间】:2020-11-04 08:18:39
【问题描述】:

我有一个像这样检索 JSON 文件的视图:

json_lang = requests.get('path/to/file.json').json()
return render(request, "chat/chatroom.html", {'jsonLang': json.dumps(json_lang)})

假设 json 文件的结构有点像这样:

{
    "en": {
        "action.send": "Send",
        "chat.joined": "joined the chatroom",
        "chat.left": "left the chatroom",
...
}

如果我尝试访问像 {{ jsonLang.en.chat.joined }} 这样的模板中的其中一个字符串,我会得到一个空输出。

其他方法,例如尝试像这样jsonLang["en"]["chat.joined"] 访问它会导致错误:

TemplateSyntaxError at /chat/
Could not parse the remainder: '["en"]["chat.joined"]' from 'json_lang.["en"]["chat.joined"]'

这样做的正确方法是什么?

【问题讨论】:

  • 改用json_lang["en"]["chat.joined"] 试试
  • 已经试过了,我在帖子里写错了。这就是给我错误的原因

标签: json django


【解决方案1】:

首先,'jsonLang': json.dumps(json_lang) 表示您将字符串传递给模板。您应该使用 'jsonLang': json_lang 将其作为 Python 字典传递。

其次,由于 Django 模板中的字典查找是带有点表示法的 implemented,如果键本身包含点,则会中断。

一种解决方案是添加一个快速模板过滤器,允许通过带点的键访问字典项目 - Access a dictionary element in the Django template with a variable

【讨论】:

  • 我尝试使用不包含点的键:我仍然得到一个空输出
  • 我必须注意,如果我使用{{ jsonLang }},我会得到一个输出:整个 json 文件。尝试访问该文件中的任何键都会导致空输出。
猜你喜欢
  • 1970-01-01
  • 2014-10-13
  • 2018-10-02
  • 2015-03-17
  • 2018-02-14
  • 1970-01-01
  • 2012-06-29
  • 2011-10-04
  • 2012-09-06
相关资源
最近更新 更多