我在 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 中打印嵌套字典值的正确方法是什么?
最佳答案
Django 模板语言故意与 Python 代码不同,因此人们不鼓励将业务逻辑写入其中。
但是模板逻辑足够强大,可以通过以点表示法编写来对项目执行项目 getter 。例如:
{{ books[4][1] }}
Should be written like:
{{ books<b>.4.1</b> }}
所以你可以这样写:
{% if 4 in books %}
{% if 1 in books<b>.4</b> %}
{{ books<b>.4.1</b> %}
{% endif %}
{% endif %}
话虽这么说,所有这些查找根本没有必要。因为如果查找失败,Django 通常不会产生错误。在这种情况下,当需要打印时,它将回退到 TEMPLATE_STRING_IF_INVALID
字符串。默认情况下是空的,因此我们可以避免麻烦并编写:
{{ books.4.1 }}
如果该元素不存在,它将打印settings.TEMPLATE_STRING_IF_INVALID
(如果未指定,则为空字符串)。
如果您想执行检查,您可以直接对整个变量使用if
,例如:
{% <b>if books.4.1</b> %}
{{ books.4.1 %}
{% endif %}
检查此“模板变量”表达式是否得到解析,并且结果具有真实性 True
。
关于python - 打印可能存在也可能不存在的嵌套字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51124186/