命名空间模式
即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL。
举个例子:
project中的urls.py
from django.conf.urls import url, include urlpatterns = [ url(r'^app01/', include('app01.urls', namespace='app01')), url(r'^app02/', include('app02.urls', namespace='app02')),]
app01中的urls.py
from django.conf.urls import urlfrom app01 import views app_name = 'app01'urlpatterns = [ url(r'^(?P\d+)/$', views.detail, name='detail')]
app02中的urls.py
from django.conf.urls import urlfrom app02 import views app_name = 'app02'urlpatterns = [ url(r'^(?P\d+)/$', views.detail, name='detail')]
现在,我的两个app中 url名称重复了,我反转URL的时候就可以通过命名空间的名称得到我当前的URL。
语法:
'命名空间名称:URL名称'
模板中使用:
{% url 'app01:detail' pk=12 pp=99 %}
views中的函数中使用
v = reverse('app01:detail', kwargs={'pk':11})
这样即使app中URL的命名相同,我也可以反转得到正确的URL了。