如何对直接在Python源代码文件中编码的Jinja2模板使用继承?

2024-09-30 05:15:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基本模板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源代码中放置模板并使用继承,或者这是不可能的?你知道吗


Tags: 模板appbasereturndefhtmlloaderrender
1条回答
网友
1楼 · 发布于 2024-09-30 05:15:19

代码的问题是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')

相关问题 更多 >

    热门问题