Jinja2多部分模板问题

4 投票
1 回答
3998 浏览
提问于 2025-04-16 00:02

在创建模板的时候,我通常会有三个独立的部分(头部、主体、底部),然后把它们组合起来,传递一个字符串给网络服务器(在这个例子中是CherryPy)。

我最开始的做法是这样的...

from jinja2 import Environment, FileSystemLoader
env  = Environment(loader=FileSystemLoader(''))

tmpl = env.get_template('Body.html')
page_body = tmpl.render()

tmpl = env.get_template('Header.html')
page_header = tmpl.render()

tmpl = env.get_template('Footer.html')
page_footer = tmpl.render()

page_code = page_header + page_body + page_footer

但是这样会有重复的代码,所以我接下来的做法是...

def render_template(html_file):
    from jinja2 import Environment, FileSystemLoader
    env  = Environment(loader=FileSystemLoader(''))
    tmpl = env.get_template(html_file)
    return tmpl.render()

page_header = render_template('Header.html')
page_body   = render_template('Body.html')
page_footer = render_template('Footer.html)

不过,这样做意味着每个部分都是在自己的环境中创建的——这样会有问题吗?这种做法还有其他缺点吗?

我选择了这种三部分的方式,而不是使用子模板的方法,因为我觉得这样可能更灵活(而且更容易理解),但我可能错了。有没有人想说服我,使用头部、主体和底部的方式可能会更好呢?

任何建议都非常感谢。

阿兰

1 个回答

11

如果你不想使用模板继承,你有没有考虑过用 include 呢?

{% include 'header.html' %}
    Body
{% include 'footer.html' %}

撰写回答