在Django模板中使用utf-8字典
我有一个小的 FAQ.conf 文件,里面包含了字典结构,我用 ast 导入到 Django 中。问题和答案里有 utf-8 字符和 HTML 标记。
{
'1': {'question':'','answer':''},
'2': {},
'3': {},
}
所以我用 ast 来导入它:
with open(os.path.join(FS_ROOT, FAQ_FILE)) as q: FAQ = ast.literal_eval(q.read())
把它放到我的视图上下文中,并使用过滤器 {{ FAQ|safe }} 后,我得到了:
{'1': {'answer': 'zewn\xc4\x99trznych mog\xc4\x85 si\xc4\x99 do\xc4\x87 osoby. W szczeg\xc3\xb3lno\xc5\x9bci takie, kt\xc3\xb3rych. ...}
我该怎么做才能在我的模板中得到正确的输出呢?
1 个回答
1
假设你在用Python 2,问题在于你读取文件时用的是字节字符串,而不是Unicode字符串。我认为ast
可以很好地处理utf-8,所以你可以简单地这样做:
with open(os.path.join(FS_ROOT, FAQ_FILE)) as q: FAQ = ast.literal_eval(q.read().decode('utf-8'))
或者使用codecs.open
来以正确的编码打开文件。
如果ast
对你的Unicode字符不太友好,你可以在把字符串传给Django之前,先调用decode()
。
如果你在用Python 3,问题可能是编码不是utf-8,这种情况下,像上面那样使用codecs
应该可以解决问题,只要你使用正确的编码即可。