Peut un Jinja variable du champ d'application s'étendre au-delà dans un bloc interne?

J'ai le texte suivant Jinja modèle:

{% 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 %}

Si la condition est remplie dans le for boucle, j'aimerais changer mybool vrai, alors je peux afficher mybool is true! ci-dessous. Cependant, il semble que la portée de l'intérieur de la mybool est limitée à la if déclaration, de sorte que le souhaité mybool n'est jamais réglé.

Comment puis-je définir le "global" mybool donc je peux l'utiliser dans la dernière if déclaration?

MODIFIER

J'ai trouvé quelques suggestions (uniquement la page en cache les vues correctement), mais ils ne semblent pas fonctionner. Peut-être qu'ils sont déconseillés dans Jinja2...

MODIFIER

Solution fournie ci-dessous. Je suis toujours curieux de savoir pourquoi les suggestions ci-dessus ne fonctionnent pas bien. Personne ne sait pour sûr qu'ils ont été déconseillés?

  • Ce n'est pas la réponse à votre question, mais vous pourriez tout simplement mybool comme une variable de contexte et la passer dans le modèle
  • C'est une bonne réflexion, mais malheureusement il ne fonctionne pas. Dès que vous utilisez un "set" dans le modèle, la portée de cette variable est locale.
  • > la Solution fournie ci-dessous. Je suis toujours curieux de savoir pourquoi les suggestions ci-dessus ne fonctionnent pas bien. Personne ne sait pour sûr qu'ils ont été déconseillés? Ils ont été supprimé car il n'est pas possible dans le code généré pour bien prédire dans quelle mesure elles ont à faire des bulles sur la pile de Python. Il serait possible avec certains hacks mais ça ne vaut pas la peine. Garder la logique des modèles 🙂
InformationsquelleAutor Matt Norris | 2011-02-02