WebApp2框架中如何将转义HTML标签的字符串渲染为正常列表?
解决WebApp2 + Jinja2中HTML字符串不渲染的问题
这是因为Jinja2模板引擎默认会自动转义HTML内容(为了防止XSS攻击),所以你的HTML实体被原样输出了。下面给你两种简单的解决方法:
方法一:在模板中使用safe过滤器
直接在模板调用变量的时候添加|safe过滤器,告诉Jinja2这个内容是安全的,不需要转义:
步骤1:main.py代码保持不变
import webapp2 from jinja2 import Environment, FileSystemLoader # 设置模板加载路径,假设你的模板放在templates文件夹下 env = Environment(loader=FileSystemLoader('templates')) class MainHandler(webapp2.RequestHandler): def get(self): mystring = "<ol><li>shiva</li><li>putra</li>" template = env.get_template('index.html') self.response.write(template.render(mystring=mystring)) app = webapp2.WSGIApplication([('/', MainHandler)], debug=True)
步骤2:修改index.html
把原来的{{mystring}}改成:
{{ mystring|safe }}
这样页面就会渲染出正常的有序列表了。
方法二:在后端标记内容为安全
如果你不想每次在模板里都加过滤器,可以在传递变量给模板之前,用Jinja2的Markup类把字符串标记为安全内容:
修改main.py代码
import webapp2 from jinja2 import Environment, FileSystemLoader, Markup env = Environment(loader=FileSystemLoader('templates')) class MainHandler(webapp2.RequestHandler): def get(self): # 用Markup包裹字符串,标记为安全 mystring = Markup("<ol><li>shiva</li><li>putra</li>") template = env.get_template('index.html') self.response.write(template.render(mystring=mystring)) app = webapp2.WSGIApplication([('/', MainHandler)], debug=True)
index.html保持不变
直接使用{{mystring}}即可,Jinja2会直接渲染其中的HTML。
⚠️ 注意:只有当你完全信任这个字符串的来源时才使用这两种方法!如果字符串包含用户输入的内容,一定要先做严格的过滤和转义,避免XSS安全风险。
内容的提问来源于stack exchange,提问作者SHIVAPUTRA UDAGATTI
相关产品推荐
相关产品推荐

