如何使用 Flask 在 Jinja 模板中渲染特殊字符
How to render special characters in jinja templates with flask
我在 Flask 中以 JSON 从 API 中获取数据,并试图将其作为 RSS 呈现给 Jinja 模板,但是 JSON 中的字符如 a postrophes 和 emdashes 在模板中呈现为 ’
和 —
。
如何确保模板呈现正确的字符?
这是我在烧瓶中的代码:
json_resp = resp.json()
posts = json_resp['list']
template = render_template('recs.rss',posts=posts)
response = make_response(template)
response.headers.set('Content-Type', 'application/rss+xml')
return response
这是 recs.rss 模板:
<?xml version="1.0"?>
<rss version="2.0">
<channel>
...
{% for post in posts %}
<item>
{% if post.title %}<title><![CDATA[{{ post.title }}]]></title>{% endif %}
...
</item>
{% endfor %}
</channel>
</rss>
如果我将其编码为 utf-8:
post_item['title'] = post_item['title'].encode('utf-8'
我在 RSS 提要中获得了 utf-8 编码,它似乎以 b
开头,而不是 u
:
b'The Dirty Secret of \xe2\x80\x98Secret Family Recipes\xe2\x80\x99'
如果我尝试按照下面评论中的建议使用 utf-8 进行解码,并且 post:
我得到一个错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 20: invalid start byte
我想知道是否有一些方法可以通过我发送到神社模板的 headers 来解决这个问题,或者可以放置在神社模板本身中以允许诸如此类的东西存在弯引号。
您应该在 Content-Type
header 和 application/rss+xml; charset=utf-8
中指定响应 body 编码。
我在 Flask 中以 JSON 从 API 中获取数据,并试图将其作为 RSS 呈现给 Jinja 模板,但是 JSON 中的字符如 a postrophes 和 emdashes 在模板中呈现为 ’
和 —
。
如何确保模板呈现正确的字符?
这是我在烧瓶中的代码:
json_resp = resp.json()
posts = json_resp['list']
template = render_template('recs.rss',posts=posts)
response = make_response(template)
response.headers.set('Content-Type', 'application/rss+xml')
return response
这是 recs.rss 模板:
<?xml version="1.0"?>
<rss version="2.0">
<channel>
...
{% for post in posts %}
<item>
{% if post.title %}<title><![CDATA[{{ post.title }}]]></title>{% endif %}
...
</item>
{% endfor %}
</channel>
</rss>
如果我将其编码为 utf-8:
post_item['title'] = post_item['title'].encode('utf-8'
我在 RSS 提要中获得了 utf-8 编码,它似乎以 b
开头,而不是 u
:
b'The Dirty Secret of \xe2\x80\x98Secret Family Recipes\xe2\x80\x99'
如果我尝试按照下面评论中的建议使用 utf-8 进行解码,并且 post:
我得到一个错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x91 in position 20: invalid start byte
我想知道是否有一些方法可以通过我发送到神社模板的 headers 来解决这个问题,或者可以放置在神社模板本身中以允许诸如此类的东西存在弯引号。
您应该在 Content-Type
header 和 application/rss+xml; charset=utf-8
中指定响应 body 编码。