我在apache2服务器上运行mod_wsgi下的Flask应用程序。
在应用程序中有一个简单的视图函数,它为render_template()
提供了一些西里尔字符:
@app.route('/test')
def test():
return render_template('test.html', string='Немного кириллических символов')
test.html看起来像这样:
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
{% if string %}
<h1>{{string}}</h1>
{% else %}
nope
{% endif %}
</body>
</html>
当应用程序使用内置Flask服务器时,一切都很好。
但是,当我在apache服务器上运行它时,/test
会返回500错误。
Traceback显示来自MarkupSafe的_native.escape()
函数试图用'ascii'编解码器解码给定的字符串,这对我来说是令人惊讶的。
从追溯中提取:
File "/var/www/jusite/jusite/templates/test.html", line 7, in top-level template code
<h1>{{string}}</h1>
File "/var/www/jusite/jusite/juvenv/lib/python3.4/site-packages/markupsafe/_native.py", line 22, in escape
return Markup(text_type(s)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
完全追溯是可用的here