Python 单独的;包括「;及;模板";Jinja2目录
我正在寻找一种方法,用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 =
'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