我在Python(Django)中有一个嵌套的字典,就像这样:
books =
{
1: { 1: 'Alice', 2: 'Bob', 3: 'Marta' },
2: { 1: 'Alice', 3: 'Marta' },
3: { 1: 'Alice', 2: 'Bob' },
}
现在,在我的模板中,我想打印一个特定的项目,但是仅当它存在时,例如books [4] [1]。但是如果我这样做,我会得到:
{{ books[4][1] }}
Error: Could not parse the remainder
所以我要检查一下
{% if 4 in books %}
{% if 1 in books[4] %}
{{ books[4][1] %}
{% endif %}
{% endif %}
这也不起作用,并给出解析错误(无法解析其余部分)。如果我不确定字典中是否存在嵌套字典值,那么在Django中打印嵌套字典值的正确方法是什么?
答案 0 :(得分:3)
Django模板语言故意与Python代码不同,因此不鼓励人们向其中编写业务逻辑。
但是模板逻辑足够强大,可以通过用点表示法编写代码来对项目执行项目获取。例如:
{{ books[4][1] }}
应写为:
{{ books.4.1 }}
所以您可以这样写:
{% if 4 in books %}
{% if 1 in books.4 %}
{{ books.4.1 %}
{% endif %}
{% endif %}
话虽如此,所有这些查找完全没有必要。由于Django通常会在查找失败时 not 产生错误。在这种情况下,当需要打印时,它将回退到TEMPLATE_STRING_IF_INVALID
字符串。默认情况下该字段为空,因此我们可以避免麻烦并写:
{{ books.4.1 }}
,如果元素不存在,则会打印settings.TEMPLATE_STRING_IF_INVALID
(如果未指定,则为空字符串)。
如果要执行检查,可以 直接在整个变量上使用if
,例如:
{% if books.4.1 %}
{{ books.4.1 %}
{% endif %}
检查此“模板变量”表达式是否得到解析,结果是否具有真实性 True
。