分开"包括"和"模板" Jinja2

时间:2015-07-10 11:07:26

标签: python jinja2

我正在寻找一种方法,让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' %}

1 个答案:

答案 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。