我正在使用Django 1.3。如果我将以下片段放入我的模板中:
{% if 'my string'|length > 10 %}{{ 'my string'|length }}{% endif %}
渲染引擎打印'9'。我唯一能想到的是|length
过滤器返回一个字符串,但这看起来很奇怪。有人能指出我正确的方向吗?
谢谢!
修改
我实际想要测试的长度来自flatpage.title
提供的django.contrib.flatpages
。出于这个原因,我宁愿不破解视图来提供模板所需的信息。我希望我可以简单地使用Django docs, here中描述的|length
过滤器。但是,正如已经指出的那样,实现此目的的唯一方法似乎也是使用|get_digit
过滤器,其行为在这方面没有明确定义。 :(
答案 0 :(得分:11)
我建议不要使用此,但我之前已合并了get_digit
和length
过滤器,以使其发挥作用。
{% if "12345678901234567890"|length|get_digit:"-1" > 20 %}
{{ "12345678901234567890"|length }}
{% endif %}
在模板中没有任何结果,但是:
{% if "12345678901234567890"|length|get_digit:"-1" > 19 %}
{{ "12345678901234567890"|length }}
{% endif %}
结果:
20
正在打印。
答案 1 :(得分:8)
是的,过滤器总是返回一个字符串。
您可以通过计算视图中的字符串长度来实现所需的功能,并执行以下操作:
{% if str_length > 10 %}
{{ str_length }}
{% endif %}
或者根据您的需求创建自定义过滤器:http://code.djangoproject.com/wiki/BasicComparisonFilters
编辑错误
答案 2 :(得分:3)
尝试以下条件:
{%if flatpage.title.10%}
答案 3 :(得分:2)
我知道它已经很晚了,但是按照django 2.1,您的代码可以工作。请参阅以下参考 https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#filters
{% if messages|length >= 100 %}
You have lots of messages today!
{% endif %}
答案 4 :(得分:1)
最好的解决方案是创建这样的变量:
{% with 'my_string'|length as string_length %}
your code when you have available as INT variable string_length
{% endwith %}
希望这对所有人都有帮助。
答案 5 :(得分:0)
在这里扮演魔鬼的拥护者,并问首先为什么这是必要的?如果你计算变量的值是一回事,但如果它是一个硬编码的值,只需将它放在正确的形式中。你所做的只是为静态的东西增加处理开销。