第一种情况:一个项目下每个相同app下的每个url有相同的前缀,为了方便管理把各自的不同url部分交给各自的URLconfs管理。
在任何时候,你的urlpatterns 都可以包含其它URLconf 模块。这实际上将一部分URL 放置于其它URLconfs 下面。
from django.xonf.urls import include, url
urlpatterns = [
url(r'^community/', include('mysiteapp.urls')), # 把匹配后剩下的字符串传给mysiteapp的urls 模块
url(r'^contact/', include('otherapp.urls')),
]
注意,这个例子中的正则表达式没有包含$(字符串结束匹配符),但是包含一个末尾的斜杠。每当Django 遇到include()(django.conf.urls.include())时,它会去掉URL 中匹配的部分并将剩下的字符串发送给包含的URLconf 做进一步处理。
第二种情况,在同一个app下或许部分url有相同前缀
另外一种包含其它URL 模式的方式是使用一个url() 实例的列表。例如,请看下面的URLconf:
from django.conf.urls import include, url
extra_patterns = [
url(r'^reports/(?P<id>[0-9]+)/$', app.view.report),
url(r'^charge/$', app.view.charge),
]
urlpatterns = [
url(r'^$', main_views.homepage),
url(r'^help/', include('help.urls')),
url(r'^credit/', include(extra_patterns)), # /credit/reports/231、/credit/charge/
]
在这个例子中,‘/credit/reports/123/ ’ URL将被 app.view.report() 这个Django 视图函数处理。