gpt4 book ai didi

python - Jinja2:渲染模板继承?

转载 作者:太空狗 更新时间:2023-10-29 18:20:45 25 4
gpt4 key购买 nike

我想使用模板呈现一个融合的 Jinja2 和 Markdown 页面,如下所示:

{% block title %}{{ title }}{% endblock %}

# {{ title[0] }}
# {{ title[1] }}

## Introduction

我可以使用上面的代码生成 HTML,但是当我将这个脚本用于自定义创作应用程序时,我希望能够为每种类型的条目定义主模板。

当我尝试通过扩展主模板来呈现上述页面时,template.html:

{% extends 'template.html' %}

{% block title %}{{ title }}{% endblock %}

# {{ title[0] }}
# {{ title[1] }}

## Introduction

我得到一个错误:

Traceback (most recent call last):
File "compiler.py", line 55, in <module>
template = Template(text).render(parser.vars)
File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 891, in render
return self.environment.handle_exception(exc_info, True)
File "<template>", line 1, in top-level template code
TypeError: no loader for this environment specified

您可以看到有问题的行是 template = Template(text).render(parser.vars)

有什么方法可以呈现上述模板代码并能够扩展 template.html

最佳答案

Jinja 的渲染器需要知道如何加载 template.html,所以你需要给 Environment 一个模板加载器实例。

例如,假设文件 page.htmltemplate.html 在当前目录中:

from jinja import FileSystemLoader
from jinja.environment import Environment

env = Environment()
env.loader = FileSystemLoader('.')
tmpl = env.get_template('page.html')
print tmpl.render(parser.vars)

已更新 - 您可以创建自定义模板加载器,或使用 jinja2.loaders 中定义的现有类之一。 .例如,DictLoader 将在 dict() 实例中查找 template.html 并将值视为模板数据。从几乎任何地方(例如 memcache、mysql、redis、Python 对象等)加载模板应该很简单。

使用DictLoader的例子:

pages = ('template.html', 'page.html')
templates = dict((name, open(name, 'rb').read()) for name in pages)
env.loader = DictLoader(templates)

page.html

{% extends "template.html" %}

关于python - Jinja2:渲染模板继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6195805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com