在include中使用名称空间有什么意义? (Django 2.0)

时间:2018-07-20 19:51:04

标签: python django django-templates django-views

在include中使用名称空间的意义是,如果在应用的url中添加app_name确实是让我使用“ app:view”语法的原因。

Blog_app / urls.py

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'),]

Project / urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog_app.urls',namespace='posts')),]

此代码可将网址反转为这样的帖子/详细信息

example.html

<a href="{% url 'posts:list' %}"> Example <a/>

但是如果删除命名空间,它仍然会将我的网址反转为帖子/详细信息

Project / urls.py

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog_app.urls')), #NAMESPACE DELETED

]

2 个答案:

答案 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