一、动态网页
其实只是每次刷新时,获取最新时间而已
1、urls.py
from django.conf.urls import patterns, url, include urlpatterns = patterns('', (r'^$','django_web_app.views.home_page'), (r'^latest_books/$', 'django_web_app.views.latest_books'), (r'^current_datetime/$', 'django_web_app.views.current_datetime'), )
2、views.py
#coding:utf-8 from django.http import HttpResponse from django.shortcuts import render_to_response from models import Book import datetime def latest_books(request): #倒叙获取最新出版的10本书 book_list = Book.objects.order_by('-pub_date')[:10] return render_to_response('latest_books.html', {'book_list': book_list}) def home_page(request): return render_to_response('home_page.html') def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
3、运行结果:
二、动态url
其实就是用正则表达式,使多个不完全确定的url对应一个“视图函数”
1、urls.py
from django.conf.urls import patterns, url, include urlpatterns = patterns('', #... (r'^current_datetime/plus/(d{1,2})/$', 'django_web_app.views.hour_plus'), )
说明如果不需要将d{1,2}作为参数,则可以不加括号,访问效果不受影响。
from django.conf.urls import patterns, url, include urlpatterns = patterns('', #... (r'^current_datetime/plus/d{1,2}/$', 'django_web_app.views.hour_plus'), )
关于r的作用:
告诉Python这是个原始字符串,不需要处理里面的反斜杠(转义字符)。
在普通Python字符串中,反斜杠用于特殊字符的转义。由于反斜杠在Python代码
和正则表达式中有冲突,因此建议在Python定义正则表达式时都使用原始字符串。
附:普通python里的一些转义字符:
http://www.cnblogs.com/allenblogs/archive/2011/04/28/2031477.html
2、views.py中新增部分:
def hour_plus(request, offset): try: offset = int(offset) except ValueError: raise Http404() dt = datetime.datetime.now() + datetime.timedelta(hours=offset) html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt) return HttpResponse(html)
说明:offset 是从匹配的URL里提取出来的,捕获的参数永远是字符串(string)类型,而
不会是整数(integer)类型,要使用整数必须类型转换。
3、运行结果:
1)不可匹配的url
2)可匹配的url
三、出错与调试习惯
django出错页可以显示足够多的相关信息,开发中尽量通过“出错页面”来调试,而不是到处使用print。
eg:查看各个局部变量的值
def hour_plus(request, offset): try: offset = int(offset) except ValueError: raise Http404() dt = datetime.datetime.now() + datetime.timedelta(hours=offset) assert False html = "<html><body>In %s hour(s), it will be %s.</body></html>" % (offset, dt) return HttpResponse(html)
此处使用了assert False
运行结果:
说明:Django 出错信息仅在 debug 模式下才会显现,Django 服务器在你开启它时默认运行在 debug 模式,
但是实际部署的时候需要禁用debug模式。
参考:http://djangobook.py3k.cn/2.0/chapter03/