今天在写一个使用django的小程序的时候,发现了几个问题,现在总结如下:
1)在python 2.5支持unicode, utf-8, ascii, gb2312, gbk等不同的编码
默认的是使用ascii,可以从下面来得到:
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>>
默认的情况下的操作如下:
>>> name = '测试'
>>> name
'\xb2\xe2\xca\xd4'
>>> name_unicode = unicode(name, 'gbk')
>>> name_unicode
u'\u6d4b\u8bd5'
>>> name_unicode = unicode(name,'gb2312')
>>> name_unicode
u'\u6d4b\u8bd5'
>>> name_utf8 = name_unicode.encode('utf-8')
>>> name_utf8
'\xe6\xb5\x8b\xe8\xaf\x95'
>>>
一般情况下,都上对utf-8的编码进行处理,所以在处理中文等情况时候(如调用md5的函数update),先应该将其转换为utf-8编码,然后再进行处理
为了更好地指出中文等编码,最好在编写python文件的时候,最好加上如下一句话:
# -*- coding: utf-8 -*-
2)对于django编程,从浏览器地址中传入的字符串默认情况下是以unicode进行编码,所以,为了进行下一步的处理,应该先对其将unicode转变为utf-8编码
另外在django中使用template的时候,template里面可以直接使用views、models里面的attributes, 所以感觉是templates是被views加载到代码中,然后再进行替换。如在views中有对象user, user中有attributes name, age等,那么在template中可以包括有如下的代码 {{ user.name }}, {{ user.age }}。
另外对于urls.py中的处理,最好是在patterns后使用appname.views等,如rival这个app使用的是rival.views
urlpatterns = patterns('rival.views',
(r'^$', 'index'),
(r'^(?P<rival_id>\w+)/$','detail'),
)