Peut-on compiler ou rétablir une partie de l'AST Jinja2?Compiler la sous-section de Jinja2 AST
Par exemple, est-il possible d'appeler une fonction ou une méthode de jinja2.environment
ou jinja2.compiler.generate
ou un équivalent sur une liste de nœuds extraits d'un modèle?
Par exemple, étant donné un modèle y.html
:
avant-tag
{% xyz %}
tag content {{ 3 + 5 }}
{% endxyz %}
apres-tag
et une extension y.py
:
# -*- coding: utf-8 -*-
from jinja2 import nodes, Environment, FileSystemLoader
from jinja2.ext import Extension
class YExtension(Extension):
tags = set(['y'])
def __init__(self, environment):
super(YExtension, self).__init__(environment)
def parse(self, parser):
tag = parser.stream.next()
body = parser.parse_statements(['name:endy'], drop_needle=True)
return nodes.Const("<!-- slurping: %s -->" % str(body))
env = Environment(
loader = FileSystemLoader('.'),
extensions = [YExtension],
)
print env.get_template('x.html').render()
Exécution python y.py
résultats dans la sortie attendue de:
avant-tag
<!-- slurping: [Output(nodes=[TemplateData(data=u'\n tag-content '),
Add(left=Const(value=3), right=Const(value=5)),
TemplateData(data=u'\n ')])] -->
sous-tag
Dans le parse
méthode, comment peut-on soit:
- compiler
body
en unicode (c.-à-d.tag-content 8
); ou, en variante, - de rétablir
body
à sa source d'origine (c'est-à-diretag-content {{ 3 + 5 }}
).
En arrière-plan, cette question a trait à deux questions précédentes:
Merci pour la lecture.
Brian
Merci WoLpH. Je pense que cela répond à ma question. La seule question résiduelle, je pense, est de savoir s'il existe un moyen de rendre les résultats extraits dans un environnement. –
@Brian M. Hunt: ce n'est pas un problème puisque vous pouvez rendre n'importe quelle chaîne dans les deux sens. Vous pouvez utiliser 'Environment.from_string()' ou 'Template (nodes)' avec tout ce que vous auriez normalement renvoyé. – Wolph
Oh, c'est vrai! Désolé, je n'étais pas clair ...La seule question résiduelle, je pense, est de savoir s'il existe un moyen de rendre les ** noeuds ** extraits (et non le texte) dans un environnement donné. –