django 字符编码出错解决方法
最新推荐文章于 2022-11-03 16:10:05 发布
学习limodou的step by step,根据第七章的例子,要完成一个address book。
os :debian etch
locale: zh_CN.UTF-8
django 1.0
python2.4.4
address/models.py 内容如下
#coding=utf-8
2
3 from django.db import models
4
5 # Create your models here.
6
7 class Address(models.Model):
8 name = models.CharField('姓名',max_length=20,unique=True)
9 gender = models.CharField('性别',choices=(('M','男'),('F','女')),
10 max_length=1 )
11 telephone = models.CharField('电话',max_length=20)
12 mobile = models.CharField('手机',max_length=11)
13
14
15 class Admin:
16 pass
在admin的界面下可以完成address对象的添加和保存,点击Address object,可以
把记录内容正确显示出来。接着根据例子,在给class Address加入
def __str__(self):
return self.name
在admin的界面中可以看到address object的名字显示出来,但是点击名字要显示
内容时出现如下错误:
TemplateSyntaxError at /admin/address/address/1/
Caught an exception while rendering: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
Original Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/django/template/debug.py", line 71, in render_node
result = node.render(context)
File "/usr/lib/python2.4/site-packages/django/template/debug.py", line 87, in render
output = force_unicode(self.filter_expression.resolve(context))
File "/usr/lib/python2.4/site-packages/django/template/__init__.py", line 559, in resolve
new_obj = func(obj, *arg_vals)
File "/usr/lib/python2.4/site-packages/django/template/defaultfilters.py", line 31, in _dec
args[0] = force_unicode(args[0])
File "/usr/lib/python2.4/site-packages/django/utils/encoding.py", line 52, in force_unicode
s = unicode(str(s), encoding, errors)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
解决方法:
__str__() 改成 __unicode__()
Django升级到1.0之后有一些变化,还有那个class Admin也不再用于生成管理界面了