2

我想包含模板中的块而不是宏,因为许多模板将包含许多其他模板的内容,所以extends不是一个选项。

我已经阅读了很多关于此的答案,包括包含文件中的块,但用例似乎总是不同。我怀疑这是做不到的。

template1.html

{% block description %}
   <p> Here is a description </p>
{% endblock %}

而在template2.html

{% from 'template1.html' import description %} <- doesnt work
4

1 回答 1

3

您在这里有两个选择。

  1. 使用宏,这听起来像是您不想做的事情。
  2. 使用模板过滤器。

假设您使用的是 Flask,这很简单:

@app.template_filter('get_block')
def template_filter(block, file):
    html = render_template(file)
    # Then use regex or something to parse
    # or even simple splits (better with named blocks), like...
    content = html.split('{%% block %s %%}'%(block))[-1]
    content = content.split('{%% endblock %%}')[0]
    return content

并使用它:

{% 'description'|get_block('template1.html') %}
于 2013-04-17T13:22:43.397 回答