django 字符编码出错解决方法

本文介绍如何使用Django 1.0创建一个简单的地址簿应用,并解决了在实现过程中遇到的字符编码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习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也不再用于生成管理界面了 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值