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