J'utilise Pyramid et Mako pour modéliser.Fonctions Python dans les modèles Mako (pas dans les blocs de niveau module)
Il est possible de définir une fonction (semi-anonyme) dans un bloc Mako <%
et %>
. Je sais que cela peut être fait avec un bloc au niveau du module <%!
et %>
, mais cela signifie que ma fonction n'a aucun accès à la portée locale lors de la modélisation, ce qui signifie que je dois passer chaque bit de variable en ce que je avoir besoin.
Exemple:
...template...
<%
variable_in_local_scope = 'blah blah blah'
def my_function():
header_name = variable_in_local_scope.upper()
return header_name
%>
${foo()}
Cela jette un NameError
dire header_name
n'est pas défini. La seule façon de contourner cela est de coder comme
<%!
def my_function(input_variable):
return input_variable.upper()
%>
${my_function(variable_in_local_scope)}
Cela fonctionne, mais quand il y a plus de quelques variables pour la fonction, il devient tout à fait unweildy. Je dois également réimporter toutes les fonctions 'helper' disponibles pour mon template dans le module-level-block.
Y a-t-il un moyen de contourner cela, ou est-ce que je fais quelque chose de complètement stupide?