【问题标题】:Django TemplateTag evaluating to a booleanDjango TemplateTag 评估为布尔值
【发布时间】:2011-08-28 05:23:19
【问题描述】:

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

例如,我可以这样做:

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

目前我已经把它写成一个 as 标记,它可以像这样正常工作:

{% my_custom_tag as var_storing_result %}

但我只是好奇我是否可以用其他方式来做,因为我认为如果我不必先将结果分配给变量会更好。

谢谢!

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      {% if my_variable|my_custom_boolean_filter %}
      

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

      【讨论】:

      • "但只有当你的标签依赖于其他模板变量时才会起作用。" - 这是有道理的,因为否则它不属于模板中的 if 语句。 :)
      【解决方案3】:

      实际上.. 你可以做的是将标签注册为assignment_tag 而不是simple_tag 然后在你的模板中你可以只做一次{% my_custom_tag as var_storing_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 %}
      

      Assignment Tag Official Doc

      【讨论】:

      • 我必须说我觉得这种方法很奇怪,但仍然很有趣,可以投票。不会使用它,但很高兴知道我可以。
      猜你喜欢
      • 2011-07-31
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2017-05-24
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多