【发布时间】:2010-12-14 14:55:34
【问题描述】:
我想查看我的 Django 模板中数组中的元素数是否大于 1。我可以使用以下语法吗?
{% if {{myarr|length}} > 1 %}
<!-- printing some html here -->
{% endif %}
谢谢
【问题讨论】:
标签: django
我想查看我的 Django 模板中数组中的元素数是否大于 1。我可以使用以下语法吗?
{% if {{myarr|length}} > 1 %}
<!-- printing some html here -->
{% endif %}
谢谢
【问题讨论】:
标签: django
从 Django 1.2 开始; if 支持布尔运算和过滤器,所以你可以这样写:
{% if myarr|length > 1 %}
<!-- printing some html here -->
{% endif %}
查看 Django 项目 documentation 了解是否带有过滤器。
【讨论】:
myarr | length 这样的空格,django 会打印它,但如果你尝试比较,你会得到一个错误。为了比较,我必须删除空格。
formset|length,如{% if formset|length == 1 %}
没有。但是你可以使用django-annoying,{% if myarr|length > 1 %} 可以正常工作。
【讨论】:
很遗憾,但 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
【讨论】:
这是 Django 模板语言没有给你的其中一种能力。您有几个选择:
在您的视图中计算此值,并将其传递到模板中的新变量中。
安装一个模板标签附加库,让您获得更丰富的比较,例如:http://www.djangosnippets.org/snippets/1350/
如果您认为自己会经常遇到模板语言限制,请完全使用不同的模板语言。
【讨论】:
也许this 会有所帮助?
在 Django 模板中检查集合大小有些受限。我使用的唯一解决方案是将另一个参数从视图传递到模板 - 但老实说,这取决于您想要实现的目标。
【讨论】: