django 多站点urls配置

转自:http://blog.csdn.net/kevin6216/article/details/6908027

django 多站点urls配置

目录(?)[-]

  1. 包含其他 URLconf
  2. 捕获的参数如何和include协同工作
  3. 额外的URLconf如何和include协同工作

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 :

fromdjango.conf.urls.defaultsimport*

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 的被捕获的参数,比如:

#rooturls.py

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('',

(r'^(?P<username>\w+)/blog/',include('foo.urls.blog')),

)

#foo/urls/blog.py

fromdjango.conf.urls.defaultsimport*

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

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('',

(r'^blog/',include('inner'),{'blogid':3}),

)

#inner.py

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('',

(r'^archive/$','mysite.views.archive'),

(r'^about/$','mysite.views.about'),

(r'^rss/$','mysite.views.rss'),

)

# urls.py

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('',

(r'^blog/',include('inner')),

)

#inner.py

fromdjango.conf.urls.defaultsimport*

urlpatterns=patterns('',

(r'^archive/$','mysite.views.archive',{'blogid':3}),

(r'^about/$','mysite.views.about',{'blogid':3}),

(r'^rss/$','mysite.views.rss',{'blogid':3}),

)

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

相关推荐