django 多站点urls配置

1. 包含其他 URLconf 

应用程序基于多个django站点,应该考虑到URLConfig包含【include】的方式来处理urls。

from django.conf.urls.defaults import * 
urlpatterns = patterns('', 
    (r'^weblog/', include('mysite.blog.urls')), 
    (r'^photos/', include('mysite.photos.urls')),
    (r'^about/$', 'mysite.views.about'), 

重要的地方:指向 include() 的正则表达式并不包含一个 $ (字符串结尾匹配符),但是包含了一个斜杆。每当 Django 遇到 include() 时,它将截断匹配的URL,并把【剩余】的字符串发往被包含的 URLconf 作进一步处理。 

被包含的 URLconf mysite.blog.urls : 
from django.conf.urls.defaults import * 
urlpatterns = patterns('', 
    (r'^(\d\d\d\d)/$', 'mysite.blog.views.year_detail'), 
    (r'^(\d\d\d\d)/(\d\d)/$', 'mysite.blog.views.month_detail'), 

当请求:/weblog/2011/ 时,首先是 (r'^weblog/', include('mysite.blog.urls'))匹配/weblog/ , 由于使用include,正则停止匹配,并将 2011/发送到mysite.blog.urls中;

(r'^(\d\d\d\d)/$', 'mysite.blog.views.year_detail') 可以匹配 2011/ ,于是将执行 mysite.blog.views.year_detail 视图,并传递参数 2011

2. 捕获的参数如何和include()协同工作

一个被包含的URLconf 接收任何来自parent URLconfs 的被捕获的参数,比如: 
# root urls.py 
 
from django.conf.urls.defaults import * 
 
urlpatterns = patterns('', 
    (r'^(?P<username>\w+)/blog/', include('foo.urls.blog')), 

 
# foo/urls/blog.py 
 
from django.conf.urls.defaults import * 
 
urlpatterns = patterns('', 
    (r'^$', 'foo.views.blog_index'), 
    (r'^archive/$', 'foo.views.blog_archive'), 

在这个例子中,被捕获的 username 变量将传递给被包含的 URLconf,进而传递给那个
URLconf 中的 每一个 视图函数。 
注意,这个被捕获的参数 总是 传递到被包含的URLconf 中的 每一 行,不管那些行对应的
视图是否需要这些参数。因此,这个技术只有在你确实需要那个被传递的参数的时候才显得
有用。 

3. 额外的URLconf如何和include()协同工作

相似的,你可以传递额外的 URLconf 选项到 include() , 就像你可以通过字典传递额外的URLconf 选项到普通的视图。当你这样做的时候,被包含 URLconf 的 每一 行都会收那些额外的参数。 比如,下面的两个 URLconf 在功能上是相等的。
# urls.py 
from django.conf.urls.defaults import * 
 
urlpatterns = patterns('', 
    (r'^blog/', include('inner'), {'blogid': 3}), 

 
# inner.py 
from django.conf.urls.defaults import * 
 
urlpatterns = patterns('', 
    (r'^archive/$', 'mysite.views.archive'), 
    (r'^about/$', 'mysite.views.about'), 
    (r'^rss/$', 'mysite.views.rss'), 



# urls.py 
from django.conf.urls.defaults import * 
 
urlpatterns = patterns('', 
    (r'^blog/', include('inner')), 

 
# inner.py 
from django.conf.urls.defaults import * 
 
urlpatterns = patterns('', 
    (r'^archive/$', 'mysite.views.archive', {'blogid': 3}), 
    (r'^about/$', 'mysite.views.about', {'blogid': 3}), 
    (r'^rss/$', 'mysite.views.rss', {'blogid': 3}), 

这个例子和前面关于被捕获的参数一样(在上一节就解释过这一点),额外的选项将 总是传递到被包含的 URLconf 中的 每一 行,不管那一行对应的视图是否确实作为有效参数接这些选项,因此,这个技术只有在你确实需要那个被传递的额外参数的时候才显得有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值