高级Django模板逻辑

时间:2013-07-25 19:16:24

标签: django templates django-templates boolean logic

我不确定这是否真的很简单,我只是在文档中浏览了一下,或者这是Django模板系统的限制,但我需要能够做一点(不是很)高级Django中的逻辑,我宁愿不必重复自己。

假设我有3个布尔值; A,B和C.

我基本上需要这样做:

{% if A and (B or C) %}
    {{ do stuff }}
{% endif %}

然而,Django似乎不允许将(B or C)逻辑与括号分组。有没有办法在Django的模板语言中进行这种分组?或者我需要做那个的非DRY版本,即:

  {% if A and B %}
        {{ do stuff }}
  {% else %}
      {% if A and C %}
          {{ do the same stuff }}
      {% endif %}
  {% endif %}

3 个答案:

答案 0 :(得分:26)

docs for the if template tag说:

  

在if标记中使用实际括号是无效的语法。如果需要它们来表示优先级,则应使用嵌套的if标记。

这是一种使用嵌套标记表达逻辑的更简洁方法:

{% if A %}
  {% if B or C %}
    {{ do stuff }}
  {% endif %}
{% endif %}

答案 1 :(得分:6)

将括号内的任何内容分配给变量。

{% with B or C as D %}
  {% if A and D %}
    {{ do stuff }}
  {% endif %}
{% endwith %}

PS:这不适用于较新版本。

答案 2 :(得分:2)

或者,你可以扩展'括号内容并将其评估为:

{% if A and B or A and C %}
    {{ do stuff }}
{% endif %}