簡體   English   中英

如何在python中為jinja2設置基本模板?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM