Django-templates:为什么不{%if“string”| length> 10%}工作吗?

时间:2011-05-02 08:29:26

标签: django django-templates

我正在使用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过滤器,其行为在这方面没有明确定义。 :(

6 个答案:

答案 0 :(得分:11)

建议不要使用此,但我之前已合并了get_digitlength过滤器,以使其发挥作用。

{% 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)

在这里扮演魔鬼的拥护者,并问首先为什么这是必要的?如果你计算变量的值是一回事,但如果它是一个硬编码的值,只需将它放在正确的形式中。你所做的只是为静态的东西增加处理开销。