Jinja: Можем ли мы получить тег {% empty %}?

Созданный на 2 дек. 2011  ·  5Комментарии  ·  Источник: pallets/jinja

В Django есть классный тег {% empty %}, который позволяет вам сделать следующее:

{% for item in list %}
    <tr><td>{{ item }}</td></tr>
{% empty %}
    <tr><td>Nothing to show!</td></tr>
{% endfor %}

что является сокращением от

{% if list %}
    {% for item in list %}
        <tr><td>{{ item }}</td?</tr>
    {% endfor %}
{% else %}
    <tr><td>Nothing to show!</td></tr>
{% endif %}

С тех пор, как я перешел на jinja, мне очень не хватало этого тега :(

Самый полезный комментарий

Это уже существует. Используйте {% else %} в цикле for. К сожалению, у нас было else до того, как Django создал пустой, и переименовывать его сейчас, чтобы он соответствовал семантике Django, довольно странно.

Все 5 Комментарий

Это уже существует. Используйте {% else %} в цикле for. К сожалению, у нас было else до того, как Django создал пустой, и переименовывать его сейчас, чтобы он соответствовал семантике Django, довольно странно.

О, я вижу. Может быть, отметить это в разделе «Переключение с других механизмов шаблонов» в разделе django?

Я не вижу этого в документации по переключению . Это упоминается в структурах управления : для документации, но было бы полезно иметь его в документации по переключению...

Если list в коде является генератором, а блоки for и if работают так же, как в Python, то конструкция if-for не решает проблему. потому что генераторы всегда правдивы, плюс такая конструкция менее идиоматична, чем блок empty .

Я не знаю, можете ли вы добавить флаг, чтобы проверить, запущен ли цикл, проверить наличие NameError: name 'item' is not defined или добавить вспомогательную переменную в list(generator) на уровне Jinja. Если нет, то единственное решение — добавить блок empty или убедить разработчиков Python в том, что пустые генераторы должны быть ложными (чтобы избежать уродливой проверки путем обработки StopIteration и «отталкивания» всплывающего элемента).

Блок else в Jinja уже работает как блок empty в Django. Никаких изменений здесь не требуется.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги