尝试在Google App Engine中呈现Django模板文件时
来自google.appengine.ext.webapp导入模板
templatepath = os.path.join(os.path.dirname( file ),'template.html')
self.response.out.write(template.render(templatepath,template_values))
我遇到以下错误:
<类型 “exceptions.UnicodeDecodeError”计算值: 'ascii'编解码器无法解码字节0xe2 位置17692:序数不在 范围(128)
args =('ascii','<!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 海峡... 07 / A-美丽的法找到的和平的头脑/ - >
',17692,17693,'序数不在范围内(128)')
encoding ='ascii'
结束= 17693
message =''
object ='<!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 海峡... 07 / A-美丽的法找到的和平的头脑/ - >
reason ='序数不在范围内(128)'
start = 17692
似乎底层的django模板引擎已采用“ascii”编码,该编码本应为“utf-8”。 谁知道什么可能导致麻烦以及如何解决? 感谢。
答案 0 :(得分:6)
嗯,结果是模板返回的渲染结果需要先解码:
self.response.out.write(template.render(templatepath,template_values).decode('utf-8'))
一个愚蠢的错误,但无论如何,谢谢大家的答案。 :)
答案 1 :(得分:2)
您使用的是Django 0.96还是Django 1.0?您可以查看main.py并查看它是否包含以下内容进行检查:
from google.appengine.dist import use_library use_library('django', '1.0')
如果您使用的是Django 1.0,则FILE_CHARSET和DEFAULT_CHARSET都应默认为'utf-8'。如果您的模板以不同的编码保存,只需将FILE_CHARSET设置为任何格式。
如果您使用的是Django 0.96,您可能需要尝试直接从磁盘读取模板,然后手动处理编码。
例如,替换
template.render( templatepath , template_values)
带
Template(unicode(template_fh.read(), 'utf-8')).render(template_values)
答案 2 :(得分:1)
您是否在文本编辑器中检查了模板是否以utf-8编码?