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

新手上路,请多包涵

我在 Flask 中使用 Jinja2。我想从一个字符串中渲染一个模板。我尝试了以下两种方法:

  rtemplate = jinja2.Environment().from_string(myString)
 data = rtemplate.render(**data)

 rtemplate = jinja2.Template(myString)
 data = rtemplate.render(**data)

然而,这两种方法都返回:

 TypeError: no loader for this environment specified

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

但是,在使用字符串时,没有指定任何地方来选择加载程序。

原文由 user3605780 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 924
2 个回答

您可以从 该列表 中提供 loader in Environment

 from jinja2 import Environment, BaseLoader

rtemplate = Environment(loader=BaseLoader).from_string(myString)
data = rtemplate.render(**data)

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

更新

正如@iver56 亲切指出的那样,最好:

 rtemplate = Environment(loader=BaseLoader()).from_string(myString)

原文由 vishes_shell 发布,翻译遵循 CC BY-SA 3.0 许可协议

当我遇到这个问题时,我想要 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)

原文由 Martin Thoma 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏