2011-11-07 5 views
1

Dans ma ligne principale, je souhaite lire une variable du contexte du modèle en cours, une fois le modèle rendu. Cette variable a été "définie" dans le modèle. Je peux accéder à la variable dans une fonction de contexte, mais comment y accéder dans ma ligne principale.Comment lire une variable de contexte jinja

result = template.render({'a' : "value-1" }) 
# in the template {% set b = "value-2" %} 
b = ? 

Mise à jour: J'ai trouvé une solution dans la source webapp2. La ligne est:

b = template.module.b 

Répondre

3

j'ai découvert, Avec l'aide de la source webapp2-extras, l'accès au contexte jinja actuel est possible dans la ligne principale python. Voir aussi: class jinja2.Template dans la documentation jinja.

Python ligne principale:

result = template.render({'a' : "value-1" }) 
# in the template {% set b = "value-2" %} 
b = template.module.b 

Merci pour votre aide.

+0

Grande trouvaille! Merci d'avoir partagé. – Ski

0

Je ne recommande pas vous faire ce que vous demandez et plutôt penser à une meilleure solution, est le aki-réponse de toute façon ici:

from jinja2 import Template 

class MyImprovedTemplate(Template): 
    def render(self, *args, **kwargs): 

     # this is copy-pasted from jinja source, context added to return 

     vars = dict(*args, **kwargs) 
     context = self.new_context(vars) 
     try: 
      return context, concat(self.root_render_func(context)) 
     except Exception: 
      exc_info = sys.exc_info() 
     return context, self.environment.handle_exception(exc_info, True) 

>>> t = MyImprovedTemplate('{% set b = 2 %}') 
>>> context, s = t.render() 
>>> context['b'] 
'2' 
+1

J'ai trouvé une autre solution à mon problème après avoir regardé le code webapp2. La ligne est: b = template.module.b – voscausa

Questions connexes