Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单独的;包括「;及;模板";Jinja2目录_Python_Jinja2 - Fatal编程技术网

Python 单独的;包括「;及;模板";Jinja2目录

Python 单独的;包括「;及;模板";Jinja2目录,python,jinja2,Python,Jinja2,我正在寻找一种方法,用Jinja2单独设置'template'和'includes'目录,并且只允许 例如,假设我有以下目录布局: /templates/ base.html /includes/ header.html footer.html 我希望确保应用程序级别的get\u模板只有base.html可见,并且includetemplate语句只有header.html和footer.html可用 我知道我可以将两个目录都添加到加载程序中,例如: loader =

我正在寻找一种方法,用Jinja2单独设置
'template'
'includes'
目录,并且只允许

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

/templates/
    base.html
/includes/
    header.html
    footer.html
我希望确保应用程序级别的
get\u模板
只有
base.html
可见,并且
include
template语句只有
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

模板
实例有一个
环境
属性,因此看起来可以这样做

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。

顺便说一句,@Tom Christie的解决方案对我不起作用,但引导我找到了解决方案,该解决方案是谁做的:>>>template.environment.loader=includes_loader