urlpatterns = patterns('',(r'^hello/$', 'mysite.views.hello'),(r'^time/$', 'mysite.views.current_datetime'),(r'^time/plus/(\d{1,2})/$', 'mysite.views.hours_ahead'),(r'^tag/(\w+)/$', 'weblog.views.tag'),)写成:
from django.conf.urls.defaults import *urlpatterns = patterns('mysite.views',(r'^hello/$', 'hello'),(r'^time/$', 'current_datetime'),(r'^time/plus/(\d{1,2})/$', 'hours_ahead'),)urlpatterns += patterns('weblog.views',(r'^tag/(\w+)/$', 'tag'),)2、URL正则匹配 如果请求的方法含有参数
def home(request, year='', month='01'):则访问的URL可以写成:
url(r'^(\d{4})/(\d{2})$', 'hello.views.home')这个可以用在:举个例子来说,一般的博客都喜欢以这样的url命名自己的博文:/year/month/day/xxx.html。如果我们按照我们前面所说的做, 需要为每个日志设计url映射,这显然是不科学的,如果我们可以在确定展示什么内容之前确定用户请求里的year,month等信息的话,问题便迎刃而解了。 3、URL使用命名组: 还是上面那个请求方法,URL可以写成:
url(r'^(?P或者\d{4})/(?P \d{2})$', 'hello.views.home')
url(r'^(?P相对于第二点来说,优点很明显,不会混乱参数赋值顺序。 4、URL参数传递: 还可以写成:\d{2})/(?P \d{4})$', 'hello.views.home')
url(r'^/$', 'hello.views.home',{'year':2013,'month':09})这个又有什么用呢?来看: 以这段代码作为例子:
# urls.pyfrom django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('',(r'^events/$', views.event_list),(r'^blog/entries/$', views.entry_list),)
# views.pyfrom django.shortcuts import render_to_responsefrom mysite.models import Event, BlogEntrydef event_list(request):obj_list = Event.objects.all()return render_to_response('mysite/event_list.html', {'event_list': obj_list})def entry_list(request):obj_list = BlogEntry.objects.all()return render_to_response('mysite/blogentry_list.html', {'entry_list': obj_list})这两个视图做的事情实质上是一样的: 显示一系列的对象。 让我们把它们显示的对象的类型抽象出来:
# urls.pyfrom django.conf.urls.defaults import *from mysite import models, viewsurlpatterns = patterns('',(r'^events/$', views.object_list, {'model': models.Event}),(r'^blog/entries/$', views.object_list, {'model': models.BlogEntry}),)
# views.pyfrom django.shortcuts import render_to_responsedef object_list(request, model):obj_list = model.objects.all()template_name = 'mysite/%s_list.html' % model.__name__.lower()return render_to_response(template_name, {'object_list': obj_list})就这样小小的改动,我们突然发现我们有了一个可复用的,模型无关的视图! 从现在开始,当我们需要一个视
图来显示一系列的对象时,我们可以简简单单的重用这一个 object_list视图,而无须另外写视图代码了。
我的博客其他文章列表