Django 模板和 XML 问题

3 投票
2 回答
4776 浏览
提问于 2025-04-16 19:17

我有一个Django的视图,它用render_to_response(rss.xml, {"list":list})来渲染这个列表:

<a href="link.html">description</a>
<a href="link2.html">description2</a>
<a href="link3.html">description3</a>

rss.xml模板如下:

<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
        {% for item in list%}
        {{item}}
        {% endfor %}

这个方法可以正常工作,但是里面的<和""会被替换成它们特殊的HTML字符值,比如:

<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
&lt;a href=&quot;link.html&quot;&gt;Description&lt;/a&gt;
&lt;a href=&quot;link2.html&quot;&gt;Description2&lt;/a&gt;
&lt;a href=&quot;link3.html&quot;&gt;Description3&lt;/a&gt;

我该怎么做才能直接输出原始字符串,让文档变成:

<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
<a href="link.html">description</a>
<a href="link2.html">description2</a>
<a href="link3.html">description3</a>

2 个回答

5

你应该用自动转义标签把for循环包起来,像这样:

<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
{% autoescape off %}
    {% for item in list%}
    {{item}}
    {% endfor %}
{% endautoescape %}

在自动转义标签之间,django不会对字符进行转义

可以查看这里: https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#autoescape

3

在你的代码中,把 {{item}} 替换成 {{item|safe}}。这样做可以避免把HTML字符转义。想了解更多,可以查看这个文档页面

撰写回答