单独的"includes"目录和"templates"目录 Jinja2



我正在寻找一种方法,使单独的'template''includes'目录与Jinja2,只允许

例如,我有以下目录布局:

/templates/
    base.html
/includes/
    header.html
    footer.html

我想确保应用程序级别get_template只有base.html可见,并且include模板语句只有header.htmlfooter.html可用。

我知道我可以将两个目录都添加到加载器中,例如:

loader = jinja2.FileSystemLoader(['/templates/', '/includes/'])
env = jinja2.Environment(loader=loader)
template = env.get_template('base.html')

但是这并没有给我我所寻找的两种不同模板类型的严格分离。

是否有办法强制这种分离,使.get_template('base.html')将成功,但{% include 'base.html' %}将失败?

是否有一些方法我可以使用两个不同的加载器,一个初始获取模板,第二个将在渲染模板时使用?

例如,我可以这样做吗?…

base_loader = jinja2.FileSystemLoader('/templates/')
includes_loader = jinja2.FileSystemLoader('/includes/')
base_env = jinja2.Environment(loader=base_loader)
includes_env = jinja2.Environment(loader=includes_loader)
template = env.get_template('base.html')
template.env = includes_env

template实例有一个environment属性,所以看起来可以这样做…

base_loader = jinja2.FileSystemLoader('/templates/')
includes_loader = jinja2.FileSystemLoader('/includes/')
base_env = jinja2.Environment(loader=base_loader)
includes_env = jinja2.Environment(loader=includes_loader)
template = base_env.get_template('base.html')
template.environment = includes_env

这应该确保只有/includes/目录下的文件对{% include ... %}模板语句可用。

编辑:在代码的第7行将env更改为base_env

最新更新