Reputation: 3509
When trying to render a Django template file in Google App Engine
from google.appengine.ext.webapp import template
templatepath = os.path.join(os.path.dirname(file), 'template.html')
self.response.out.write (template.render( templatepath , template_values))
I come across the following error:
<type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xe2 in position 17692: ordinal not in range(128)
args = ('ascii', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Str...07/a-beautiful-method-to-find-peace-of-mind/ -->
', 17692, 17693, 'ordinal not in range(128)')
encoding = 'ascii'
end = 17693
message = ''
object = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Str...07/a-beautiful-method-to-find-peace-of-mind/ -->
reason = 'ordinal not in range(128)'
start = 17692
It seems that the underlying django template engine has assumed the "ascii" encoding, which should have been "utf-8". Anyone who knows what might have caused the trouble and how to solve it? Thanks.
Upvotes: 2
Views: 2404
Reputation: 3509
Well, turns out the rendered results returned by the template needs to be decoded first:
self.response.out.write (template.render( templatepath , template_values).decode('utf-8') )
A silly mistake, but thanks for everyone's answers anyway. :)
Upvotes: 6
Reputation: 8176
Are you using Django 0.96 or Django 1.0? You can check by looking at your main.py and seeing if it contains the following:
from google.appengine.dist import use_library use_library('django', '1.0')
If you're using Django 1.0, both FILE_CHARSET and DEFAULT_CHARSET should default to 'utf-8'. If your template is saved under a different encoding, just set FILE_CHARSET to whatever that is.
If you're using Django 0.96, you might want to try directly reading the template from the disk and then manually handling the encoding.
e.g., replace
template.render( templatepath , template_values)
with
Template(unicode(template_fh.read(), 'utf-8')).render(template_values)
Upvotes: 2
Reputation: 43096
Did you check in your text editor that the template is encoded in utf-8?
Upvotes: 1