Есть ли причина, по которой вы не можете сравнить фильтр шаблона со строкой в ​​синтаксисе шаблона Django? - PullRequest
0 голосов
/ 07 февраля 2009

Я пытаюсь сделать это, и не удается. Есть ли причина, по которой он не будет работать в синтаксисе шаблонов Django? Я использую последнюю версию Django.

{% ifequal entry.created_at|timesince "0 minutes" %}

Ответы [ 5 ]

5 голосов
/ 07 февраля 2009

Это не работает, потому что это не должно работать. То, что вы просите, не является частью языка шаблонов.

Вы не можете применить фильтр в середине тега, как {% ifequal. Когда тег шаблона использует переменную, он не ожидает выражения, он ожидает переменную, ничего более.

Такая логика - извлечение времени, сравнение и т. Д. - это то, что вы должны делать в своей функции просмотра.

Затем ваша функция представления помещает элемент «zerominutes» в контекст для использования шаблоном. Шаблоны просто не могут много обрабатывать.

Они предназначены для выполнения минимума, необходимого для визуализации HTML. Все остальное должно быть в вашей функции просмотра.

5 голосов
/ 07 февраля 2009
Тег

{% ifequal %} не поддерживает выражения фильтра в качестве аргументов. Целый entry.created_at|timesince обрабатывается как идентификатор переменной.

Обходной путь Quik: введите промежуточную переменную с результатом выражения, используя {% with %}, например:

{% with entry.created_at|timesince as delta %}
    {% ifequal delta "0 minutes" %}
    ....
    {% endifequal %}
{% endwith %}
2 голосов
/ 09 февраля 2009

См. тикет # 5756 и ссылки в комментариях для получения дополнительной информации. Патч для Django в ticket # 7295 реализует эту функцию. В ticket # 7806 предлагается более широкий рефакторинг системы шаблонов, основанной на # 7295 , и это решило бы эту проблему среди других.

Я не думаю, что такое сравнение с работой противоречило бы философии дизайна шаблонов Django.

0 голосов
/ 08 февраля 2009

Я, наконец, отказался от использования языка шаблонов Django для чего-либо, кроме простейших страниц. Проверьте Jinja2 для почти совместимой с синтаксисом альтернативы. И да, вы можете выбрать, какой использовать постранично.

0 голосов
/ 07 февраля 2009

Я думаю, что вы можете, хотя я не вижу никакого использования этого в моей кодовой базе. Возможно, entry.created_at|timesince не дает ожидаемого значения. Попробуйте поставить

X{{entry.created_at|timesince}}X 

в ваш шаблон и посмотреть, какое значение он производит. Символ X означает, что вы можете видеть начальный или конечный пробел в случае, если это является проблемой.

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