18

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

假设我有 3 个布尔值;A、B 和 C。

我基本上需要做:

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

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

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

3 回答 3

28

if 模板标签的文档说:

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

这是用嵌套标签表达逻辑的一种更简洁的方式:

{% if A %}
  {% if B or C %}
    {{ do stuff }}
  {% endif %}
{% endif %}
于 2013-07-25T19:21:49.997 回答
6

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

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

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

于 2016-01-05T06:40:17.910 回答
2

或者,您可以“扩展”括号的内容并将其评估为:

{% if A and B or A and C %}
    {{ do stuff }}
{% endif %}
于 2017-01-31T17:29:57.567 回答