如果在应用程序的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 回答
正如Django网站所说:
https://docs.djangoproject.com/en/2.0/topics/http/urls/#url-namespaces
Blog_app/urls.py 中的应用程序名称
app_name = 'posts'
用作URL命名空间 . 如果删除它,您将收到命名空间错误 . 您可以在include
中分配另一个名称空间,并且两者都可以用作url名称空间 .