我有一个基本模板base.html
和一个派生模板page2.html
,如下所示:
{# page2.html#}
{% extends "base.html" %}
{# end #}
我可以使用:
渲染模板jinjaEnv = Environment()
jinjaEnv.loader = FileSystemLoader('.')
@app.route('/page2')
def page2():
page2Tem = jinjaEnv.get_template("page2.html")
h = page2Tem.render()
return h
这很好用。但是当我尝试:
nfpTem = Template("""\
{% extends "base.html" %}
stuff
""")
@app.route('/newfrontpage')
def frontPage():
h = nfpTem.render()
return h
我收到错误:
TypeError: no loader for this environment specified
如何在我的Python源代码中放置模板并使用继承,或者这是不可能的?
答案 0 :(得分:1)
您的代码存在的问题是,jinja会尝试使用加载程序在您的模板上找到'base.html'
{% extends "base.html" %}
。如果你想让它工作,你需要实例化一个加载器,如果你想要python脚本上的嵌入数据,一个简单的加载器就是DictLoader
就像这个例子:
import jinja2
loader = jinja2.DictLoader(
{'base':
'this will be filled {% block to_fill %}{% endblock %}',
'child':
'{% extends "base" %} {% block to_fill %}filled from child with value {{ value }}{% endblock %}'
})
env = jinja2.Environment(loader=loader)
print env.get_or_select_template('base').render()
print env.get_or_select_template('child').render(value='foo')