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。

发表评论