django中URL常用配置方法

1:直接导入视图函数

复制代码
1 from django.conf.urls.defaults import *
2 from mysite.views import hello
3 urlpatterns = patterns('',
4         (r'^hello/$', hello),
5         (r'^time/$', time),
6 )
复制代码

2:导入包函模块名和函数的客串,而不是函数本身

复制代码
1 from django.conf.urls.defaults import *
2 from mysite import views
3 urlpatterns = patterns('',
4         (r'^hello/$', 'views.hello'),
5         (r'^time/$', 'views.time'),
6 )
复制代码

3:不用导入任何视图内容,写清楚字符串描述

1 from django.conf.urls.defaults import *
2 urlpatterns = patterns('',
3         (r'^hello/$', 'mysite.views.hello'),
4         (r'^time/$', 'mysite.views.time'),
5 )

4:提取一个公共视图前缀

1 from django.conf.urls.defaults import *
2 urlpatterns = patterns('mysite.views',
3         (r'^hello/$', 'hello'),
4         (r'^time/$', 'time'),
5 )

5:partterns()返回对对象的相加

复制代码
 1 旧:
 2     from django.conf.urls.defaults import *
 3     urlpatterns = patterns('mysite.view',
 4         (r'^hello/$', 'hello'),
 5         (r'^time/$', 'time'),
 6         (r'^other/$', 'mysite.others.other'),
 7     )
 8 新:
 9     from django.conf.urls.defaults import *
10     urlpatterns = patterns('mysite.view',
11         (r'^hello/$', 'hello'),
12         (r'^time/$', 'time'),
13     )
14     urlpatterns += patterns('mysite.others',
15         (r'^other/$', 'other'),
16     )
复制代码

6:带命名组的URL

到目前为止,在所有URLconf例子中,我们使用的很简单,即“无命名”正则表达式组,在我们想要捕获的URL部分加上小括号,django会将捕获的文本作为位置参数传递给视图函数。在更高级的用法中,还可以使用“命名”正则表达式组来捕获URL,并且将其作为“关键字”参数 传给视图

下面是一个使用无名组的URLconf的例子:

复制代码
1 from django.conf.urls.defaults import *
2 from mysite import views
3 urlpatterns = patterns('',
4         (r'^arcticles/(\d{4})/$',views.year_archive),
5         (r'^arcticles/(\d{4})/(\d{2})/$', view.moth_archive),
6 )
复制代码

下面是相同的URLconf,使用命名组进行了重写:

复制代码
1 from django.conf.urls.defaults import *
2 from mysite import views
3 urlpatterns = patterns('',
4         (r'^arcticles/(?P<year>\d{4})/$', veiws.year_archive),
5         (r'^arcticles/(?P<year>\d{4})/(?P<month>\d{2})/$', veiws.month_archive),
6 )
复制代码

如果不带命名组,请求/arcticle/2006/03/将会等于这样的函数调用
    month_archive(request, '2006', '03')
而带命名组,同样的请求就是这样的函数调用:
    month_archive(request, year='2006', month='03')
从中可以看出,使用命名组可以让你的URLconf更加清晰,减少参数次序可能搞混潜在的Bug, 还可以让你的定义中对参数重新排序。

7:视图冗余:

复制代码
 1 # urls.py
 2 
 3     from django.conf.urls.defaults import *
 4     from mysite import views
 5 
 6     urlpatterns = patterns('',
 7         (r'^(foo)/$', views.foobar_view),
 8         (r'^(bar)/$', views.foobar_view),
 9     )
10 
11     # views.py
12 
13     from django.shortcuts import render_to_response
14     from mysite.models import MyModel
15 
16     def foobar_view(request, url):
17         m_list = MyModel.objects.filter(is_new=True)
18         if url == 'foo':
19         template_name = 'template1.html'
20         elif url == 'bar':
21         template_name = 'template2.html'
22         return render_to_response(template_name, {'m_list': m_list})
复制代码

利用上面的方法可以减少视图冗余

8:为url里传入固定的参数:

复制代码
 1 # urls.py
 2 
 3         from django.conf.urls.defaults import *
 4         from mysite import views
 5 
 6         urlpatterns = patterns('',
 7             (r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}),
 8             (r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}),
 9         )
10 
11  # views.py
12 
13         from django.shortcuts import render_to_response
14         from mysite.models import MyModel
15 
16         def foobar_view(request, template_name):
17             m_list = MyModel.objects.filter(is_new=True)
18             return render_to_response(template_name, {'m_list': m_list})
复制代码

9:include导入:

复制代码
1 from django.conf.urls.defaults import *
2 urlpatterns = patterns('',
3         (r'^weblog/', include('mysite.blog.urls')),
4         (r'^photos/', include('mysite.photos.urls')),
5         (r'^about/$', 'mysite.views.about'),
6 )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值