You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:21:25