我正在寻找一种方法,使单独的'template'
和'includes'
目录与Jinja2,只允许
例如,我有以下目录布局:
/templates/
base.html
/includes/
header.html
footer.html
我想确保应用程序级别get_template
只有base.html
可见,并且include
模板语句只有header.html
和footer.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