Mam następujący Jinja szablonu:Czy zakres zmiennej Jinja może wykraczać poza wewnętrzny blok?
{% set mybool = False %}
{% for thing in things %}
<div class='indent1'>
<ul>
{% if current_user %}
{% if current_user.username == thing['created_by']['username'] %}
{% set mybool = True %}
<li>mybool: {{ mybool }}</li> <!-- prints True -->
<li><a href='#'>Edit</a></li>
{% endif %}
{% endif %}
<li>Flag</li>
</ul>
</div>
<hr />
{% endfor %}
{% if not mybool %}
<!-- always prints this -->
<p>mybool is false!</p>
{% else %}
<p>mybool is true!</p>
{% endif %}
Jeśli warunek jest spełniony w pętli for
chciałbym zmienić mybool
true więc mogę wyświetlić mybool is true!
poniżej. Wygląda jednak na to, że zakres wewnętrznego modelu mybool
jest ograniczony do instrukcji if
, dlatego nigdy nie jest ustawiony.
Jak ustawić "globalny" mybool
, aby móc go używać w ostatnim oświadczeniu if
?
EDIT
Znalazłem some suggestions (tylko buforowane odsłon poprawnie), ale nie wydaje się do pracy. Być może są one przestarzałe w Jinja2 ...
EDIT
Rozwiązanie przedstawione poniżej. Wciąż jestem ciekawy, dlaczego powyższe sugestie nie działają. Czy ktoś wie na pewno, że zostały wycofane?
To nie jest odpowiedź na to pytanie, ale można po prostu ustawić 'mybool' jako zmienna kontekstowego i przekazać je do szablonu – Cameron
to dobre myślenie, ale niestety to nie działa. Jak tylko użyjesz "set" w szablonie, zasięg tej zmiennej jest lokalny. –
> Rozwiązanie dostarczone poniżej. Wciąż jestem ciekawy, dlaczego powyższe sugestie nie działają. Czy ktoś wie na pewno, że zostały wycofane? Zostały one usunięte, ponieważ nie jest możliwe w wygenerowanym kodzie, aby poprawnie przewidzieć, jak daleko będą musiały spłynąć na stosie Pythona. Byłoby to możliwe przy niektórych hakach, ale nie jest to warte wysiłku. Trzymaj logikę z szablonów :) –