2
能編譯或還原Jinja2 AST的一部分嗎?Jinja2的編譯部分AST
例如,是否可以從模板中提取的節點列表中調用jinja2.environment
或jinja2.compiler.generate
或某個等價的函數或方法?
例如,給定的模板y.html
:
avant-tag
{% xyz %}
tag content {{ 3 + 5 }}
{% endxyz %}
apres-tag
和延伸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()
運行python y.py
導致的預期輸出:
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
在parse
方法,如何可以:
- 編譯
body
爲unicode(即,tag-content 8
);或者可選地 - 將
body
恢復到其原始來源(即tag-content {{ 3 + 5 }}
)。
作爲背景的問題,這個問題涉及兩種現有問題:
謝謝您的閱讀。
布賴恩
謝謝WoLpH。我認爲這回答我的問題。我認爲唯一剩下的問題是在給定環境的情況下是否有方法呈現提取的結果。 – 2010-11-30 01:25:23