L'exemple suivant de la Mako docs ne fait fonctionne pas:Mako: NameError lors de l'utilisation variable globale
<%
x = 12
%>
<%def name="outer()">
<%
y = 15
%>
<%def name="inner()">
inner, x is ${x}, y is ${y}
</%def>
outer, x is ${x}, y is ${y}
</%def>
Quand j'ajoute <%self:outer />
ci-dessous pour appeler à la définition (rien d'autre est dans le fichier), la page va sortir de l'erreur et mon journal apache dit
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] File "/tmp/mako_template_cache/index.html.mako.py", line 82, in render_outer
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] __M_writer(str(x))
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] File "/usr/lib/python3/dist-packages/mako/runtime.py", line 195, in __str__
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] raise NameError("Undefined")
[Sun Dec 02 13:25:08 2012] [error] [client 89.247.172.1] NameError: Undefined
Que pourrais-je faire de mal? J'ai Mako 0.7.0 de Debian pour lequel cela devrait fonctionner.
Merci. Donc, y a-t-il un marqueur aquivalent de '$ {outer()}'? ('<%outer/>' ne fonctionne pas, ni '<% body: outer />'). Ou avez-vous simplement voulu forcer la syntaxe d'appel de fonction pour l'accès à la variable globale? –
ouais j'avais vérifié si j'avais ajouté une syntaxe qui garantit l'accès local et il n'y a pas maintenant. La chose est, en disant '<% a = 5 %>' dans votre modèle n'est pas "global", c'est local à body(). Un global est quelque chose que vous pouvez obtenir en utilisant un bloc '<%! %>', donc vous cherchez peut-être des [attributs héritables] (http://docs.makotemplates.org/en/latest/inheritance.html#inheritance-attr). – zzzeek
Il serait utile s'il y avait une remarque à ce sujet à http://docs.makotemplates.org/en/latest/defs.html qu'après avoir lu * Tous les defs, de haut niveau ou non, ont accès à l'espace de noms contextuel actuel exactement de la même manière que leur modèle contenant. * J'ai eu l'impression «x» serait également visible. –