【问题标题】:Checking the number of elements in an array in a Django template检查Django模板中数组中的元素数
【发布时间】:2010-12-14 14:55:34
【问题描述】:

我想查看我的 Django 模板中数组中的元素数是否大于 1。我可以使用以下语法吗?

{% if {{myarr|length}} > 1 %}
<!-- printing some html here -->
{% endif %}

谢谢

【问题讨论】:

    标签: django


    【解决方案1】:

    从 Django 1.2 开始; if 支持布尔运算和过滤器,所以你可以这样写:

    {% if myarr|length > 1 %}
    <!-- printing some html here -->
    {% endif %}
    

    查看 Django 项目 documentation 了解是否带有过滤器。

    【讨论】:

    • 一件奇怪的事情:在 1.6 中,如果你使用像 myarr | length 这样的空格,django 会打印它,但如果你尝试比较,你会得到一个错误。为了比较,我必须删除空格。
    • 请注意,您可以使用相同的语法检查formset|length,如{% if formset|length == 1 %}
    【解决方案2】:

    没有。但是你可以使用django-annoying{% if myarr|length &gt; 1 %} 可以正常工作。

    【讨论】:

      【解决方案3】:

      很遗憾,但 django 的 'if' 标签中没有这样的功能。有一个rumors that smarter if tag will be added in 1.2.,至少在High priority 列表中。

      您也可以使用"smart_if" tag from djangosnippets.com

      或者您可以添加自己的过滤器(与 length_is 过滤器相同) - 但它只是添加更多无用的代码:(

      from django import template
      register = template.Library()
      
      def length_gt(value, arg):
          """Returns a boolean of whether the value is greater than an argument."""
          try:
              return len(value) > int(arg)
          except (ValueError, TypeError):
              return ''
      length_gt.is_safe = False
      register.filter(length_gt)
      

      更多信息请咨询django docs

      【讨论】:

        【解决方案4】:

        这是 Django 模板语言没有给你的其中一种能力。您有几个选择:

        1. 在您的视图中计算此值,并将其传递到模板中的新变量中。

        2. 安装一个模板标签附加库,让您获得更丰富的比较,例如:http://www.djangosnippets.org/snippets/1350/

        3. 如果您认为自己会经常遇到模板语言限制,请完全使用不同的模板语言。

        【讨论】:

          【解决方案5】:

          也许this 会有所帮助?

          在 Django 模板中检查集合大小有些受限。我使用的唯一解决方案是将另一个参数从视图传递到模板 - 但老实说,这取决于您想要实现的目标。

          【讨论】:

            猜你喜欢
            • 2021-02-26
            • 2015-01-02
            • 1970-01-01
            • 1970-01-01
            • 2016-08-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多