Я недавно перешел на jinja2 из шаблонов django, до сих пор у меня не было особых проблем с переносом наших существующих шаблонов, но теперь мне поручено конвертировать наши собственные теги шаблонов django.У меня возникли проблемы с тегом для создания структуры, подобной меню, которая выглядит примерно так:
{% createmenu mainmenu %}
<!-- syntax: menuitem url-name-to-resolve <url-args> <url-kwargs> "Url Label" -->
{% menuitem main-url-name 'Home' %}
{% menuitem some-other-url-name obj.foo obj.bar 'Page2' %}
{% if some_condition %}
{% menuitem some-other-url-name obj.foo obj.bar 'Page2' %}
{% endif %}
{% menutemplate %}
<li class="
{% if menu.is_selected %}selected{% endif %}
{% if menu.is_first %}first{% endif %}
{% if menu.is_last %}last{% endif %}">
{% if menu.is_active %}
<a href="{{menu.url}}">{{menu.label}}</a>
{% else %}
<span class="inactive">{{menu.label}}</span>
{% endif %}
</li>
{% endcreatemenu %}
Поведение этого делает настройку классов в пунктах меню намного проще, например,menu знает, является ли он первым или последним в списке во время рендеринга, поэтому, если я окружу пункт меню в условии if, он может измениться, будет ли он или другие узлы отображаться первым или последним.
Теперь к дзиндзя.Я пробовал и контекстные функции, и расширения, и макросы, но я не могу получить такое же поведение, потому что я не знаю, как отложить рендеринг пунктов меню до тех пор, пока не узнаю, какие из них будут отрисованы.На данный момент я полностью застрял в том, как продолжить, любая помощь будет оценена.