Django系列教程:[X]学习中的常见问题(不定期更新)
注明:python版本为3.3.1、Django版本为1.5.1,操作系统为Windows7,其他版本有一些不同的地方读者可以自行探讨。
为了解决学习Django学习过程中遇到的一些问题,特地列出此章,在以后的教程中,如果还有什么问题也将逐渐更新到此处。
[一:中文乱码问题]
Django系列教程的第四章有人提问刚刚更改Django中的Templates文件,发现在模版中加入中文字符后Django页面显示乱码,改一改后又会报错,我稍微看了一下,因为教程中使用的都是英文并没有涉及到这个问题,所以我花了点时间搞出几个乱码错误,最后得到成功的配置如下:
首先写入中文的html文件必须为utf-8编码,将文件另存为可以修改编码。至于有些人说的加入标签修改字符格式倒不一定是必须的。
然后修改settings.py文件,加入下面两行:
FILE_CHARSET = 'utf-8' DEFAULT_CHARSET = 'utf-8'
至于LANGUAGE_CODE = 'zh-cn'也不是必须的,改这个是让Django显示中文,和字符格式没太大关系。
# -*- coding=UTF-8 -*-
# -*- coding=gb18030 -*-
这行代码也可以,视具体情况选择添加哪一行,如下面的例子我就是添加了第二行。
python manage.py runserver
然后再firstsite目录下建立testcn.py文件保存为ANSI格式(记事本另存为就可以),然后在其中输入如下代码:
from django.template import Template,Context from django.http import HttpResponse def testcn(request): html="<html><body>{{name}}</body></html>" t=Template(html) c=Context({'name':'我的名字叫hello!'}) return HttpResponse(t.render(c))
最后配置urls.py文件使得其可以在浏览器中打开,代码如下:
url(r'^testcn/$','firstsite.testcn.testcn',name='testcn'),
打开浏览器输入:http://127.0.0.1:8000/testcn/ 结果发现出现了以下错误。
SyntaxError at /testcn/
(unicode error) 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation byte (testcn.py, line 6)Request Method: GET
Request URL: http://127.0.0.1:8000/testcn/
Django Version: 1.5.1
Exception Type: SyntaxError
Exception Value: (unicode error) 'utf-8' codec can't decode byte 0xce in position 0: invalid continuation byte (testcn.py, line 6)
Exception Location: D:\PROGRAM FILES\PYTHON33\lib\site-packages\django\utils\importlib.py in import_module, line 35
Python Executable: D:\PROGRAM FILES\PYTHON33\python.exe
Python Version: 3.3.1
Python Path: ['D:\\Djcode\\firstsite',
'C:\\Windows\\system32\\python33.zip',
'D:\\PROGRAM FILES\\PYTHON33\\DLLs',
'D:\\PROGRAM FILES\\PYTHON33\\lib',
'D:\\PROGRAM FILES\\PYTHON33',
'D:\\PROGRAM FILES\\PYTHON33\\lib\\site-packages']
Server time: Wed, 15 May 2013 17:48:22 +0800
当然,这不是中文乱码错误,这压根就出不来文字。这就是错误一。怎么解决这个错误呢,其实只要在testcn.py文件的第一行加上下面一行代码就可以了。
# -*- coding=gb18030 -*-
而这时候当你把testcn.py改为utf8格式,在输入上面的地址:则发现可以正常显示:我的名字叫hello
另外关于decode和encode函数的使用对中文字符的编码和解码我们在以后的Django教程中会陆续提到,这里就不再赘述了。
好了,尽量将你的数据库和文件都保存为utf8格式可以省去不少麻烦哦!
另附:关于unicode编码的一些知识可以参见此文:http://www.pythonclub.org/python-basic/encode-detail
[二:待更新]