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