Python jinja2从字符串加载模板:TypeError:未指定此环境的加载程序
我在烧瓶里用金甲2号。我想从字符串渲染模板。我尝试了以下两种方法:Python jinja2从字符串加载模板:TypeError:未指定此环境的加载程序,python,flask,jinja2,Python,Flask,Jinja2,我在烧瓶里用金甲2号。我想从字符串渲染模板。我尝试了以下两种方法: rtemplate = jinja2.Environment().from_string(myString) data = rtemplate.render(**data) 及 但是,这两种方法都返回: TypeError: no loader for this environment specified 我检查了手册和此url: 但是,在使用字符串时,没有指定要选择加载器的位置。您可以在环境中提供加载器 Edit:问题
rtemplate = jinja2.Environment().from_string(myString)
data = rtemplate.render(**data)
及
但是,这两种方法都返回:
TypeError: no loader for this environment specified
我检查了手册和此url:
但是,在使用字符串时,没有指定要选择加载器的位置。您可以在
环境中提供加载器
Edit:问题在于myString
,它有{%include'test.html%}
,Jinja2不知道从哪里获取模板
更新
正如@iver56所指出的,最好:
rtemplate = Environment(loader=BaseLoader()).from_string(myString)
当我谈到这个问题时,我想:
尝试此操作时,我得到错误:AttributeError:“Environment”对象没有属性“get_source”@user3605780我稍微编辑了代码,但它没有更改任何内容,并且在我的机器上工作。您使用的是哪个版本的jinja2
?我遇到了相同的错误,我使用的是2.7.3版,我刚刚升级到2.8版,然后出现了错误:TypeError:get_source()缺少1个必需的位置参数:“template”BaseLoader扩展了对象,因此它有一个\u init\u
函数。你是对的,\uuuuu init\uuuuu
做的不多,但这不是这里的重点。关键是要有一个BaseLoader实例,而不仅仅是引用类。我不想太迂腐,我会想象from_string
是一个类方法(即使用@classmethod
装饰器声明),设计为从类调用。因为它是一个工厂方法,所以创建一个实例来调用它的方法并扔掉它肯定没有意义?好吧,也许我有点迂腐,但当创建实例很昂贵时,这可能很重要。
from jinja2 import Environment, BaseLoader
rtemplate = Environment(loader=BaseLoader).from_string(myString)
data = rtemplate.render(**data)
rtemplate = Environment(loader=BaseLoader()).from_string(myString)
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)