[英]How to set a base template for jinja2 in python?
通過jinja2,我可以在模板中使用{% extends "base.html" %}
。 但是我想在python代碼中設置默認的基本模板,如下所示:
t=environment.get_template(filename)
t.render(base_template="base.html")
因此,當所有模板(必須)使用相同的基本模板時,我不需要向每個模板添加extends
線。
我寫了一個自己的加載器:
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
關鍵字之間的空格數不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.