包括来自Jinja模板的块

时间:2013-04-17 13:14:41

标签: python jinja2

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

我已经阅读了很多关于此的答案,包括blocks in included files,但用例似乎总是不同。我怀疑这不可能做到。

template1.html

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

并在template2.html

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

1 个答案:

答案 0 :(得分:3)

这里有两种选择。

  1. 使用宏,这听起来像你不想做的事。
  2. 使用template_filter。
  3. 假设您正在使用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') %}