[英]Getting a dict of all the blocks in a Jinja2 template
假设我有一些 Jinja2 模板,里面有几个块:
{% block A %}Blah{% endblock %}
{% block B %}whatever{% endblock %}
{% block C %}you get the idea{% endblock %}
我想要一个 Python function 它将把它变成一个字典(或 JSON,或其他),每个块有一个条目。 所以 output 会是这样的:
{'A': 'Blah', 'B': 'whatever', 'C': 'you get the idea'}
有这样做的既定方法吗?
我问是因为我想通过 AJAX 更新我的应用程序页面,而不是在保持向后兼容性的同时重新加载。 如果我可以解析我的 Jinja2 模板的块,那么我可以使用完全相同的模板文件轻松生成整个页面或部分页面。 那么,作为一个附属问题……有没有更好的方法来解决这个问题?
您可以查看Template.blocks
字段。 它具有块渲染功能的字典。
块渲染 function 在以上下文(我猜)作为参数调用时返回生成器。
我希望以下代码片段对您有所帮助。
for key, blockfun in template.blocks.iteritems(): print key, ':', ''.join(blockfun({}))
结果是:
A : Blah C : you get the idea B : whatever
这似乎有效:
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
这给了我三个块中的每一个,在三个单独的变量中呈现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.