簡體   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