在include中使用名称空间的意义是,如果在应用的url中添加app_name确实是让我使用“ app:view”语法的原因。
from django.urls import path
from django.views.generic.base import RedirectView
from . import views
app_name = 'posts' #APP_NAME
urlpatterns = [
path('',RedirectView.as_view(url='posts/'), name='home'),
path('posts/',views.post_list, name='list'),
path('posts/detail/<int:pk>',views.post_detail, name='detail'),
path('posts/delete',views.post_delete, name='delete'),
path('posts/create',views.post_create, name='create'),
path('posts/update',views.post_update, name='update'),]
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog_app.urls',namespace='posts')),]
此代码可将网址反转为这样的帖子/详细信息
<a href="{% url 'posts:list' %}"> Example <a/>
但是如果删除命名空间,它仍然会将我的网址反转为帖子/详细信息
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog_app.urls')), #NAMESPACE DELETED
]
答案 0 :(得分:1)
Blog_app / urls.py 中的应用名称app_name = 'posts'
用作url名称空间。如果删除它,则会出现名称空间错误。您可以在include
中分配另一个名称空间,并且两者都可以用作url名称空间。
答案 1 :(得分:1)
如Django网站所说:
URL命名空间使您甚至可以唯一地反向命名URL模式 如果不同的应用程序使用相同的URL名称。这是一个好习惯 让第三方应用始终使用命名空间的网址(就像我们在 教程)。同样,如果多个 部署了应用程序实例。换句话说,因为 单个应用程序的多个实例将共享命名的URL, 命名空间提供了一种区分这些命名URL的方法。
https://docs.djangoproject.com/en/2.0/topics/http/urls/#url-namespaces