Jinja: La portée de l'affectation de bloc est différente de l'affectation en ligne

Créé le 27 juin 2016  ·  5Commentaires  ·  Source: pallets/jinja

Je souhaite définir une variable dans un modèle enfant qui sera rendu dans le modèle parent. Si j'utilise l'affectation de blocs, rien n'est rendu. Si j'utilise l'affectation en ligne, cela fonctionne comme prévu. J'utilise Jinja 2.8 avec Python 2.

base.html :

{{ content }}

bad.html avec affectation de bloc, rien n'a été rendu:

{% extends 'base.html' %}
{% set content %}
Hello, World!
{% endset %}

good.html , rend correctement:

{% extends 'base.html' %}
{% set content = 'Hello, World!' %}
bug

Commentaire le plus utile

J'ai aussi ce problème. Test simple:

{% extends "..." %}
...
{% set aaa = 'test' %}
{% set bbb %}
    <a href="/">bar</a>
{% endset %}
...
{% block some_block %}
 {{ aaa }} {# renders 'test' #}
 {{ bbb }} {# renders empty string #}
{% endblock %}

Tous les 5 commentaires

J'ai aussi ce problème. Test simple:

{% extends "..." %}
...
{% set aaa = 'test' %}
{% set bbb %}
    <a href="/">bar</a>
{% endset %}
...
{% block some_block %}
 {{ aaa }} {# renders 'test' #}
 {{ bbb }} {# renders empty string #}
{% endblock %}

J'obtiens le même comportement incohérent avec la déclaration «avec»:

{% with %}
{% set something = 'werd' %}
{% set something_block %}
werd werd werd
{% endset %}
{% endwith %}
...
{{ something }} {# renders empty string #}
{{ something_block }} {# renders 'werd werd werd' #}

ces bugs sont probablement liés?

L'instruction with n'est pas censée fonctionner de cette façon, c'est donc intentionnel. Je ne peux cependant pas reproduire le problème défini indépendamment de cela dans master.

Tant pis, je vois de quoi il s'agit.

Modifié dans 45b59b522a542c21611214b352df049a3b6dbcb4

Cette page vous a été utile?
0 / 5 - 0 notes