繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM