Django基础之命名空间模式(include)
即使不同的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 url from app01 import views app_name = "app01" urlpatterns = [ url(r"^(?P<pk>\d+)/$", views.detail, name="detail1") ]
app02中的urls.py
from django.conf.urls import url from app02 import views app_name = "app02" urlpatterns = [ url(r"^(P<pk>\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。