首页 文章

打印可能存在或不存在的嵌套字典值

提问于
浏览
2

我在Python(Django)中有一个嵌套字典,如下所示:

books = 
 { 
   1: { 1: 'Alice', 2: 'Bob', 3: 'Marta' }, 
   2: { 1: 'Alice', 3: 'Marta' }, 
   3: { 1: 'Alice', 2: 'Bob' }, 
 }

现在在我的模板中,我想打印一个特定的项目,但只有它存在,例如书籍[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中打印嵌套字典值的正确方法是什么?

1 回答

  • 3

    Django模板语言故意与Python代码不同,因此不鼓励人们将业务逻辑写入其中 .

    但模板逻辑足够强大,可以通过以点表示法写入项目来对项目执行项目获取 . 例如:

    {{ books[4][1] }}
    

    应该写成:

    {{ books.4.1 }}
    

    所以你可以这样写:

    {% if 4 in books %}
      {% if 1 in books.4 %}
         {{ books.4.1 %}
      {% endif %}
    {% endif %}
    

    话虽如此,所有这些查找根本不是必需的 . 由于Django通常不会在查找失败时产生错误 . 在这种情况下,当需要打印时,它将回退到 TEMPLATE_STRING_IF_INVALID 字符串 . 这默认是空的,所以我们可以避免麻烦并写:

    {{ books.4.1 }}
    

    如果元素不存在,将打印 settings.TEMPLATE_STRING_IF_INVALID (如果未指定,则为空字符串) .

    如果要执行检查,可以直接在整个变量上使用 if ,如:

    {% if books.4.1 %}
      {{ books.4.1 %}
    {% endif %}
    

    检查这个"template variable"表达式是否得到解决,结果是否真实 True .

相关问题