使用jinja2,我可以在模板中使用{% extends "base.html" %}
。但是我想在python代码中设置一个默认的基本模板,如下所示:
t=environment.get_template(filename)
t.render(base_template="base.html")
所以当所有模板(必须)使用相同的基本模板时,我不需要为每个模板添加extends
行。
答案 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
关键字之间的空格数不同。