我不确定这是否真的很简单,我只是在文档中浏览了一下,或者这是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 %}
答案 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 %}