Как я могу пропустить рендеринг файла, если поля не определены? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть куча шаблонов ( t ) Я выполняю рендеринг для нескольких случаев ( c ), поэтому, в общем, t × c шаблоны генерируются.

for template in templates:
    for case in cases:
        rendered = template.render(case.data)
        save(case.filename, rendered)

Теперь у нас есть новое требование, где некоторые комбинации не имеют значения, например, 3 из них. Я не хочу, чтобы файлы отображались в тех редких случаях. (т × с - 3)

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

Мне кажется, что в шаблоне jinja нужно что-то сказать: «извините, этот шаблон не удался», и тогда исключение может быть обработано во время генерации. (также внутри циклов for, но там меньше решений) Я придумал это, и это отчасти работает, но мне это не нравится:

{{ foo if foo is defined else 1 / 0 }}

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

Вместо исключения, есть ли способ сообщить, что шаблон не должен генерироваться в jinja?

(Должен ли я просто избегать такого рода вещей и просто помещать логику в код генерации)

1 Ответ

0 голосов
/ 07 ноября 2018

В итоге я создал фильтр, который выглядел примерно так:

from jinja2 import Undefined

def skip_if_not_defined(value):
    if type(value) is Undefined:
        raise SkipTemplateException()

Так что, когда я использовал это

{{ blah|skip_if_not_defined }}

это вызовет исключение, которое можно поймать.

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