Django TemplateTag评估为布尔值

Lud*_*udo 8 django django-templates

是否可以创建一个评估为布尔值的Django模板标记?

我可以这样做:

{% if my_custom_tag %}
    ..
{% else %}
    ..
{% endif %}
Run Code Online (Sandbox Code Playgroud)

目前我已将其写为as标签,其工作正常如下:

{% my_custom_tag as var_storing_result %}
Run Code Online (Sandbox Code Playgroud)

但我只是好奇,如果我能以另一种方式做到这一点,因为我认为如果我不必先将结果分配给变量就更好了.

谢谢!

Dan*_*man 5

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

{% if my_variable|my_custom_boolean_filter %}
Run Code Online (Sandbox Code Playgroud)

但是只有当你的标签依赖于其他模板变量时才会有效.


Jos*_*wne 5

实际上......你可以做的是注册标签assignment_tag而不是simple_tag在你的模板中你可以做{% my_custom_tag as var_storing_result %}一次然后定期,如果你想要评估布尔值的块.超级有用!例如

模板标签

def my_custom_boolean_filter:
    return True

register.assignment_tag(my_custom_boolean_filter)
Run Code Online (Sandbox Code Playgroud)

模板

{% my_custom_boolean_filter as my_custom_boolean_filter %}


{% if my_custom_boolean_filter %}
    <p>Everything is awesome!</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

作业标签官方文件


Ale*_*ard 2

您必须编写某种自定义的 {% if %} 标记来处理该问题。在我看来,最好使用已有的东西。它运行良好,并且任何其他开发人员都很容易弄清楚发生了什么。