Pytanie Zmienna pętli Jinja nie jest dostępna w szablonach include-d


Mam kod podobny do następującego w jednym z moich szablonów jinja

{% for post in posts %}
    {% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}

który ma renderować każdy post w środku posts kolekcja, w zależności od .type postu. Mam dla każdego inną konfigurację szablonu post.type. A dla tych, których nie mam szablonu, powraca do default szablon wiadomości.

Teraz chcę, aby indeks postu był wyświetlany od dołu, wewnątrz szablonów postów, które są dostarczane przez loop.revindex. Ale z jakiegoś powodu, jeśli używam loop.revindex wewnątrz szablonu wpisu pojawia się komunikat o błędzie UndefinedError: 'loop' is undefined.

Więc jest loop niedostępne w included szablony? Czy to według projektu? Czy robię coś nie tak z tym, jak zorganizowałem szablony, aby nie były dostępne?

Edytować Okej, wymyśliłem obejście w pętli for, zanim dodam mój szablon

{% set post_index = loop.revindex %}

I użyć post_index wewnątrz szablonu wpisu. Nie idealny, ale wydaje się jedynym sposobem. Nadal chcę znać twoje rozwiązania.

Edytuj 2 Jeszcze jedno, jestem w stanie uzyskać dostęp do post zmienna wewnątrz included szablon, ale nie loop zmienna.


12
2018-01-11 12:00


pochodzenie




Odpowiedzi:


Jeśli jest to możliwe z {% with %} komunikat.

Spróbuj tego:

{% with %}
    {% set loop_revindex = loop.revindex %}
    {% include ... %}
{% endwith %}

Zamiast używać loop.revindex w dołączonym szablonie użyj loop_revindex.


5
2018-01-11 12:08



Tak, ustawienie go na inną zmienną lokalną jest rozwiązaniem, pomyślałem natychmiast po opublikowaniu pytania. Zobacz moją edycję na pytanie. Nie wymagało with chociaż. Nie wiedziałem with też, dzięki za napiwek :) - Shrikant Sharat


Inną opcją jest przekazanie całości loop Zmienna do dołączonego szablonu, ustawiając zmienną lokalną na loop

{% for post in posts %}
    {% set post_loop = loop %}
    {% include ["posts/" + post.type + ".html", "posts/default.html"] %}
{% endfor %}

To daje ci dostęp do wszystkich loops właściwości, i, dla mnie, czyni to bardziej zrozumiałym w dołączonym szablonie czym jest ta zmienna.


1
2017-09-03 15:40