获取Jinja2模板中所有块的字典

3
假设我有一些 Jinja2 模板,其中包含几个块:
{% block A %}Blah{% endblock %}
{% block B %}whatever{% endblock %}
{% block C %}you get the idea{% endblock %}

我希望有一个Python函数,将其转换为字典(或JSON等),每个块都有一个条目。因此,输出将类似于:

{'A': 'Blah', 'B': 'whatever', 'C': 'you get the idea'}

有没有一种已经建立的方法来做到这一点?

我问这个问题是因为我想让我的应用程序通过AJAX更新页面,而不是重新加载,同时保持向后兼容性。如果我可以解析Jinja2模板的块,那么我就可以使用完全相同的模板文件轻松生成整个页面或部分页面。所以,作为一个辅助问题...是否有更好的方法来解决这个问题?

2个回答

7
你可以查看Template.blocks字段。它有块渲染函数的字典。
当块渲染函数被传入上下文(我猜)作为参数时,它返回生成器。
我希望以下代码片段能够帮助你。
    for key, blockfun in template.blocks.iteritems():
        print key, ':',  ''.join(blockfun({}))

结果是:
    A : Blah
    C : you get the idea
    B : whatever


4

这似乎是有效的:

from jinja2 import Template
from jinja2.utils import concat

t = """{% block A %}Blah{% endblock %}
{% block B %}whatever {{ a }}{% endblock %}
{% block C %}you get the idea{% endblock %}
"""

template = Template(t)
context = template.new_context({'a': 'AAAAAAAA'})
A = concat(template.blocks['A'](context))
B = concat(template.blocks['B'](context))
C = concat(template.blocks['C'](context))

print A
print B
print C

那给了我三个块,分别在三个变量中呈现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接