Flask如何从字符串渲染响应体而非模板文件?报错求助
解决Flask从字符串渲染模板的错误
你的代码报错TypeError: Can't compile non template nodes,原因是DictLoader要求传入模板字符串,但你传入了已经实例化的Template对象。以下是几种正确的实现方式:
方式一:直接使用Jinja2的Template类
无需构建Loader和Environment,直接用Template类处理字符串:
from jinja2 import Template template_string = "To: {{ toPerson }}, From: {{ fromPerson }}\nMessage: {{ message }}" template = Template(template_string) response = template.render(toPerson="The to person", fromPerson="The from person", message="Lorem Ipsum")
方式二:正确使用DictLoader
如果要基于Environment实现,DictLoader的字典值必须是模板字符串,而非Template实例:
from jinja2 import Environment, DictLoader template_string = "To: {{ toPerson }}, From: {{ fromPerson }}\nMessage: {{ message }}" loader = DictLoader({ 'template': template_string, # 传入原始模板字符串 }) env = Environment(loader=loader) response = env.get_template('template').render(toPerson="The to person", fromPerson="The from person", message="Lorem Ipsum")
方式三:使用Flask内置的便捷方法(推荐)
Flask封装了render_template_string,直接调用即可完成字符串模板渲染,无需手动操作Jinja2底层API:
from flask import render_template_string template_string = "To: {{ toPerson }}, From: {{ fromPerson }}\nMessage: {{ message }}" response = render_template_string(template_string, toPerson="The to person", fromPerson="The from person", message="Lorem Ipsum")
内容的提问来源于stack exchange,提问作者Ela Buwa
相关产品推荐
相关产品推荐

