Django URLconfs 中通过包含其他URLconfs 来管理部分url相同的url

时间:2021-07-05 18:08:05

第一种情况:一个项目下每个相同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 视图函数处理。