Python 什么';在include中使用名称空间有什么意义?(Django 2.0)
如果在应用程序的URL中添加app_名称实际上允许我使用“app:view”语法,那么在include中使用名称空间有什么意义呢 Blog_app/url.py 此代码用于将url反转为如下所示的posts/detail example.htmlPython 什么';在include中使用名称空间有什么意义?(Django 2.0),python,django,django-templates,django-views,Python,Django,Django Templates,Django Views,如果在应用程序的URL中添加app_名称实际上允许我使用“app:view”语法,那么在include中使用名称空间有什么意义呢 Blog_app/url.py 此代码用于将url反转为如下所示的posts/detail example.html Blog\u app/url.py中的app nameapp\u name='posts'用作url命名空间。如果删除它,将得到一个名称空间错误。您可以在include中分配另一个名称空间,这两个名称空间都可以用作url名称空间。正如Django网站所
Blog\u app/url.py中的app name
app\u name='posts'
用作url命名空间。如果删除它,将得到一个名称空间错误。您可以在include
中分配另一个名称空间,这两个名称空间都可以用作url名称空间。正如Django网站所说:
URL名称空间允许您唯一地反转命名的URL模式
如果不同的应用程序使用相同的URL名称。这是一个很好的做法
让第三方应用程序始终使用命名空间URL(就像我们在
教程)。类似地,它还允许您在多个URL时反转URL
部署应用程序的实例。换句话说,自从
单个应用程序的多个实例将共享命名URL,
名称空间提供了区分这些命名URL的方法
我还是没有完全理解。请告诉我我是否正确。如果我在
include
中设置名称空间,而不是在app\u name
中设置名称空间,我会得到一个错误。。。因此,我必须编写app\u name
,以便为我的应用程序使用名称空间,如果我想要两个名称空间,我可以在include
中添加另一个名称空间?像这样:包括('app.url',namespace='app1')和app_name='app2',我可以选择{%url'app1:view%}或{%url-app2:view%}?这就是你的意思?你是对的。您必须始终指定app_名称,然后可以在include中指定另一个名称空间,然后可以在模板中使用任意一个名称。删除应用程序名称将导致此错误。不支持在include()中指定命名空间而不提供应用程序名称。因为一个应用程序可以有多个实例。
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
]