首页 文章

使用命名空间包括什么意义? (Django 2.0)

提问于
浏览
2

如果在应用程序的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')),]

此代码适用于将URL转换为帖子/详细信息

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

  • 1

    正如Django网站所说:

    即使不同的应用程序使用相同的URL名称,URL命名空间也允许您唯一地反转命名的URL模式 . 对于第三方应用程序来说,始终使用命名空间URL是一种很好的做法(正如我们在教程中所做的那样) . 同样,如果部署了多个应用程序实例,它还允许您反向URL . 换句话说,由于单个应用程序的多个实例将共享命名URL,因此命名空间提供了一种将这些命名URL分开的方法 .

    https://docs.djangoproject.com/en/2.0/topics/http/urls/#url-namespaces

  • 1

    Blog_app/urls.py 中的应用程序名称 app_name = 'posts' 用作URL命名空间 . 如果删除它,您将收到命名空间错误 . 您可以在 include 中分配另一个名称空间,并且两者都可以用作url名称空间 .

相关问题