【发布时间】:2019-09-13 22:15:58
【问题描述】:
所以我正在尝试呈现具有正确配置的 generic.CreateView 的页面“提交”。此 URL 模式呈现良好:
from django.contrib import admin
from django.urls import include, path
from curate import views
urlpatterns = [
path('', views.SetListView.as_view(), name='set_list'),
path('new/', views.ItemListView.as_view(), name='new_list'),
path('<int:pk>/edit', views.ItemEditView.as_view(), name='item_edit'),
path('<int:pk>/delete', views.ItemDeleteView.as_view(), name='item_delete'),
path('submit/', views.SubmitItem.as_view(), name='submit_item'),
path('<slug>/', views.ItemDetailView.as_view(), name='item_detail'),
path('<int:pk>/', views.ItemDeleteView.as_view(), name='item_detailPK'),
path('<slug>/', views.SetDetailView.as_view(), name='set_detail'),
]
但由于某种原因,如果提交视图在列表中的其他位置,即如下所示,就像它在 ItemDetailView.as_view() url 下方,那么它不会呈现,它只是 404。
from django.contrib import admin
from django.urls import include, path
from curate import views
urlpatterns = [
path('', views.SetListView.as_view(), name='set_list'),
path('new/', views.ItemListView.as_view(), name='new_list'),
path('<int:pk>/edit', views.ItemEditView.as_view(), name='item_edit'),
path('<int:pk>/delete', views.ItemDeleteView.as_view(), name='item_delete'),
path('<slug>/', views.ItemDetailView.as_view(), name='item_detail'),
path('submit/', views.SubmitItem.as_view(), name='submit_item'),
path('<int:pk>/', views.ItemDeleteView.as_view(), name='item_detailPK'),
path('<slug>/', views.SetDetailView.as_view(), name='set_detail'),
]
奇怪的是,ItemDetailView 渲染良好 - 这为我页面上的所有项目提供动力?
【问题讨论】:
-
可能不相关,但您有两个具有相同模式的网址
'<slug>/'。 -
和
<slug>/一样,<int:pk>/永远不会被使用,因为它会被<slug>/匹配。 -
我使用模板中的 PK 视图来“增加”文章 - 作为“下一个”视图。这是暂时的,但现在可以使用。
-
我认为您弄错了,对
/5/的请求将由ItemDetailView与slug=5匹配,而不是ItemDeleteView与pk=5匹配。无论如何,Item*Delete*View和name='item_*detail*PK'之间存在不匹配,您应该检查一下。
标签: python django url path url-pattern