python - 打印可能存在也可能不存在的嵌套字典值

标签 python django dictionary

我在 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/

相关文章:

django - 如何切换 Django OneToOneField 的方向?

c++ - 我应该如何存储从文件中获取的这些信息?

python - 只有字典的最新值被添加到列表中

python - 尝试在 Excel 中编写与 SUMIF 功能等效的 Python 代码

python - 为什么我转换后的 Markdown HTML 标签以文本形式返回?

python - 数据输入期间Azure ML时间序列模型推理错误(python)

Python使用正则表达式递归替换字符串

python - django 测试无法将固定装置的数据插入 mysql

python - 插入 MySQL 时出错

python - 使用 pandas groupby 计算唯一值