Python(8)——Django之URL配置

1、URL分类:
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<year>\d{4})/(?P<month>\d{2})$', 'hello.views.home')
或者
url(r'^(?P<month>\d{2})/(?P<year>\d{4})$', 'hello.views.home')
相对于第二点来说,优点很明显,不会混乱参数赋值顺序。

4、URL参数传递:

还可以写成:
url(r'^/$', 'hello.views.home',{'year':2013,'month':09})
这个又有什么用呢?来看:

以这段代码作为例子:

# urls.py
from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
(r'^events/$', views.event_list),
(r'^blog/entries/$', views.entry_list),
)
# views.py
from django.shortcuts import render_to_response
from mysite.models import Event, BlogEntry

def 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.py

from django.conf.urls.defaults import *
from mysite import models, views

urlpatterns = patterns('',
(r'^events/$', views.object_list, {'model': models.Event}),
(r'^blog/entries/$', views.object_list, {'model': models.BlogEntry}),
)

# views.py

from django.shortcuts import render_to_response

def 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视图,而无须另外写视图代码了。

     我的博客其他文章列表  
http://my.oschina.net/helu





转载于:https://my.oschina.net/helu/blog/165113

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值