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