

新闻资讯
技术学院Flask渲染XML需显式设置Content-Type为application/xml,并在模板中添加XML声明及正确转义。使用Response对象返回渲染结果,对用户输入保留|escape过滤,避免XML注入;验证输出是否符合XML规范。
Flask 默认将 Jinja2 渲染结果作为 text/html 响应,但 XML 模板需要正确的 MIME 类型和编码声明。关键不是“能不能渲染”,而是“如何让浏览器/客户端正确识别并解析为 XML”。
Jinja2 本身不关心输出格式,它只负责字符串替换。你需要显式告诉 Flask 返回的是 XML:
Response 对象手动指定 mimetype='application/xml'
make_response() 包装渲染结果,并设置 headers示例:
from flask import Flask, render_template, Response
app = Flask(__name__)
@app.route('/feed.xml')
def rss_feed():
xml_content = render_template('rss.xml', items=[...])
return Response(xml_content, mimetype='application/xml')
Jinja2 模板文件(如 rss.xml)应以 XML 声明开头,确保生成内容符合 XML 规范:
{{ site_title }} {% for item in items %}- {% endfor %}
{{ item.title | escape }} {{ item.url | escape }}
注意:| escape 很重要——XML 中的 、& 等字符必须转义,否则会破坏结构。
Jinja2 默认对变量输出做 HTML 转义({{ var }} → 转义特殊字符),这在 XML 中可能过度处理(比如把合法的 © 变成 ©)。必要时可用 | safe,但仅限你**完全信任数据不含非法字符**:
| escape
{{ raw_xml | safe }}
| safe,易引发 XML 注入或解析失败部署前用工具检查生成内容:
application/xml
xmllint --noout feed.xml
不复杂但容易忽略:Content-Type + 正确转义 + XML 声明,三者齐备才能让下游系统稳定消费。