Django TemplateTag评估为布尔值

时间:2011-05-18 16:29:51

标签: django django-templates

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

例如,我可以这样做:

{% if my_custom_tag %}
    ..
{% else %}
    ..
{% endif %}

目前我已将其作为标签编写,其工作原理如下:

{% my_custom_tag as var_storing_result %}

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

谢谢!

3 个答案:

答案 0 :(得分:5)

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

{% if my_variable|my_custom_boolean_filter %}

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

答案 1 :(得分: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)

<强>模板

{% my_custom_boolean_filter as my_custom_boolean_filter %}


{% if my_custom_boolean_filter %}
    <p>Everything is awesome!</p>
{% endif %}

Assignment Tag Official Doc

答案 2 :(得分:2)

您必须编写某种自定义{%if%}标记来处理该问题。在我看来,最好使用你已经拥有的东西。它运行良好,任何其他开发人员都可以轻松找出正在发生的事情。