Django-templates:为什么 {% if "string" |length > 10 %} 根本不起作用?



我使用的是Django 1.3。如果我把下面的片段放入我的模板中:

{% if 'my string'|length > 10 %}{{ 'my string'|length }}{% endif %}

渲染引擎打印'9'。我能想到的唯一一件事是|length过滤器返回一个字符串,但这看起来很奇怪。有人能给我指个方向吗?

谢谢!

编辑:

我实际要测试的长度来自django.contrib.flatpages提供的flatpage.title。出于这个原因,我宁愿不修改视图来向模板提供我需要的信息。我希望我可以像Django文档中描述的那样简单地使用|length过滤器。然而,正如已经指出的那样,这样做的唯一方法似乎也是使用|get_digit过滤器,其行为在这方面没有明确定义。(

建议不要使用这个,但是我之前已经结合了get_digitlength过滤器来完成这个工作。

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

希望这对大家有所帮助。

我要唱反调了,问一下为什么这是必须的?如果你在计算一个变量的值,这是一回事,但如果它是一个硬编码的值,就把它以正确的形式写进去。你所做的只是为静态内容增加处理开销。

最新更新