Django TemplateTag求值为布尔值

Django TemplateTag求值为布尔值,django,django-templates,Django,Django Templates,是否可以创建一个计算结果为布尔值的Django模板标记 例如,我能做到: {% if my_custom_tag %} .. {% else %} .. {% endif %} 目前,我已将其编写为as标记,其工作原理如下: {% my_custom_tag as var_storing_result %} 但我只是好奇我是否可以用另一种方式来做,因为我认为如果我不必先把结果赋给一个变量会更好 谢谢 您必须编写某种类型的自定义{%if%}标记来处理这个问题。在我看来,最好利用

是否可以创建一个计算结果为布尔值的Django模板标记

例如,我能做到:

{% if my_custom_tag %}
    ..
{% else %}
    ..
{% endif %}
目前,我已将其编写为as标记,其工作原理如下:

{% my_custom_tag as var_storing_result %}
但我只是好奇我是否可以用另一种方式来做,因为我认为如果我不必先把结果赋给一个变量会更好


谢谢

您必须编写某种类型的自定义{%if%}标记来处理这个问题。在我看来,最好利用你已经拥有的东西。它运行良好,任何其他开发人员都可以很容易地了解发生了什么。

另一种方法可能是定义一个返回布尔值的自定义过滤器:

{% if my_variable|my_custom_boolean_filter %}

但只有当标记依赖于其他模板变量时,这才有效。

实际上。。您可以做的是将标记注册为
assignment\u标记
而不是
simple\u标记
,然后在模板中只需将
{%my\u custom\u标记注册为var\u storage\u result%}
一次,然后在需要计算布尔值的地方执行常规if块。超级有用!比如说

模板标签

def my_custom_boolean_filter:
    return True

register.assignment_tag(my_custom_boolean_filter)
模板

{% my_custom_boolean_filter as my_custom_boolean_filter %}


{% if my_custom_boolean_filter %}
    <p>Everything is awesome!</p>
{% endif %}
{%my_custom_boolean_filter作为my_custom_boolean_filter%}
{%if my_custom_boolean_filter%}
一切都很棒

{%endif%}

我必须说,我觉得这个方法很奇怪,但仍然很有趣,值得一试。我不会使用它,但很高兴知道我可以。“但只有当您的标记依赖于其他模板变量时,这才有效。”-这是有意义的,因为否则它不属于模板中的if语句。:)