如何在python中为jinja2设置基本模板?

时间:2015-08-01 15:51:12

标签: python jinja2

使用jinja2,我可以在模板中使用{% extends "base.html" %}。但是我想在python代码中设置一个默认的基本模板,如下所示:

t=environment.get_template(filename)
t.render(base_template="base.html")

所以当所有模板(必须)使用相同的基本模板时,我不需要为每个模板添加extends行。

1 个答案:

答案 0 :(得分:0)

我写了一个自己的装载机:

class FileSystemLoaderWithBase(jinja2.FileSystemLoader):
    def __init__(self, *args, **kwargs):
        self.base_template = kwargs.pop("base_template", None)
        super(FileSystemLoaderWithBase, self).__init__(*args, **kwargs)

    def get_source(self, environment, template):
        (source, path, creation) = super(
            FileSystemLoaderWithBase, self).get_source(environment, template)
        if self.base_template and template != self.base_template:
            source = '{% extends "' + self.base_template + '" %}\n' + source
        return (source, path, creation)

它可以与基本模板名称一起使用:

l=FileSystemLoaderWithBase("mytemplatefolder", base_template="base.html")

可选地,您可以允许使用自己的{% extends "..." %}行加载模板,以使某些模板具有更复杂的继承

if self.base_template and template != self.base_template\
    and "{% extends" not in source:

这当然不是很强大。例如,jinja2模板中允许{%extends关键字之间的空格数不同。