我正在寻找一种方法,让Jinja2拥有单独的'template'
和'includes'
目录,并且只允许
例如说我有以下目录布局:
/templates/
base.html
/includes/
header.html
footer.html
我希望确保应用级get_template
只有base.html
可见,并且include
模板语句只有header.html
和{ {1}}可以使用它。
我知道我可以将两个目录添加到加载程序,例如:
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' %}
答案 0 :(得分:1)
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。