Django-шаблоны: почему {% if "string" | length> 10%} вообще не работает? - PullRequest
13 голосов
/ 02 мая 2011

Я использую Django 1.3.Если я добавлю следующий фрагмент в мой шаблон:

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

, механизм рендеринга выведет «9».Единственное, о чем я могу думать, это то, что фильтр |length возвращает строку, но это кажется странным до крайности.Кто-нибудь может указать мне правильное направление?

Спасибо!

Редактировать:

Длина, которую я на самом деле хочу проверить, исходит из flatpage.title при условиина django.contrib.flatpages.По этой причине я бы предпочел не взламывать представление, чтобы предоставить информацию, необходимую для шаблона.Я надеялся, что смогу просто использовать фильтр |length, как описано в документации Django, здесь .Однако, как уже указывалось, единственный способ сделать это, по-видимому, также использовать фильтр |get_digit, поведение которого четко не определено в этом отношении.(

Ответы [ 6 ]

12 голосов
/ 02 мая 2011

Я рекомендую не использовать этот , но перед этим я объединил фильтры get_digit и length.

{% if "12345678901234567890"|length|get_digit:"-1" > 20 %} 
    {{ "12345678901234567890"|length }} 
{% endif %}

ничего не дает в шаблоне, но:

{% if "12345678901234567890"|length|get_digit:"-1" > 19 %} 
    {{ "12345678901234567890"|length }} 
{% endif %}

Результат:

20

печатается.

8 голосов
/ 02 мая 2011

Да, фильтры всегда возвращают строку.

Вы можете достичь желаемой функциональности, рассчитав длину строки в представлении и сделав что-то вроде этого:

{% if str_length > 10 %}
    {{ str_length }}
{% endif %}

Или создать собственный фильтрдля ваших нужд: http://code.djangoproject.com/wiki/BasicComparisonFilters

Отредактировано для опечатки

3 голосов
/ 03 июля 2015

Попробуйте следующее условие:
{% if flatpage.title.10%}

2 голосов
/ 04 февраля 2019

Я знаю, что уже поздно, но согласно 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 %}
1 голос
/ 22 октября 2018

Лучшее решение - создать переменную, подобную этой:

{% with 'my_string'|length as string_length %}
    your code when you have available as INT variable string_length
{% endwith %}

Надеюсь, это поможет всем.

0 голосов
/ 02 мая 2011

Собираюсь сыграть здесь адвоката дьявола и спросить, зачем это вообще необходимо? Одно дело, если вы рассчитываете значение переменной, но если это жестко запрограммированное значение, просто поместите его в правильной форме. Все, что вы делаете, это добавляете издержки обработки для чего-то статичного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...