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 web服务。命令行:
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 

 [二:待更新]

本人既是python的初学者也是Django的初学者,写这一系列教程的目的就是为了加深自己的理解,希望大家多多包涵和指教,有什么问题请留言,谢谢。
posted @ 2013-05-15 18:07  倾杯天涯  阅读(1834)  评论(0编辑  收藏  举报