django 字符编码出错解决方法

学习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 
3 from django.db import models 
5 # Create your models here. 
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也不再用于生成管理界面了 



你可能感兴趣的:(exception,Debian,django,object,Class,Codec)