jinja2从字符串加载模板:TypeError:没有指定此环境的加载程序

use*_*780 16 python jinja2 flask

我在Flask中使用Jinja2.我想从字符串中呈现模板.我尝试了以下两种方法:

 rtemplate = jinja2.Environment().from_string(myString)
 data = rtemplate.render(**data)
Run Code Online (Sandbox Code Playgroud)

 rtemplate = jinja2.Template(myString)
 data = rtemplate.render(**data)
Run Code Online (Sandbox Code Playgroud)

但是两种方法都返回:

TypeError: no loader for this environment specified
Run Code Online (Sandbox Code Playgroud)

我检查了手册和这个网址:https://gist.github.com/wrunk/1317933

但是,在使用字符串时,没有指定选择加载器.

vis*_*ell 36

您可以提供loaderEnvironment该列表

from jinja2 import Environment, BaseLoader

rtemplate = Environment(loader=BaseLoader).from_string(myString)
data = rtemplate.render(**data)
Run Code Online (Sandbox Code Playgroud)

编辑:问题是myString,它有{% include 'test.html' %}和Jinja2不知道从哪里获取模板.

UPDATE

正如@ iver56所说,最好是:

rtemplate = Environment(loader=BaseLoader()).from_string(myString)
Run Code Online (Sandbox Code Playgroud)

  • BaseLoader 扩展了 `object`,因此它有一个 `__init__` 函数。你是对的,`__init__`没有做太多事情,但这不是这里的要点。重点是拥有 BaseLoader 的实例,而不仅仅是引用该类。 (2认同)

Mar*_*oma 10

当我遇到这个问题时,我想要FileSystemLoader

from jinja2 import Environment, FileSystemLoader
with open("templates/some_template.html") as f:
    template_str = f.read()
template = Environment(loader=FileSystemLoader("templates/")).from_string(template_str)
html_str = template.render(default_start_page_lanes=default_start_page_lanes,
                           **data)
Run Code Online (Sandbox Code Playgroud)