【发布时间】:2020-01-18 18:07:49
【问题描述】:
我想在 url 的单个视图中支持上述视图 ...在我的搜索中,我遇到了不再支持的 this post,并且我发现的所有教程都已过时,它演示了如何在 django 1.8.3 中完成任务。
在“products/views.py”中,我为产品和详细信息创建了一个视图。 ProductListView 将显示所有产品,而 ProductDetailView 将显示单个产品详细信息(标题、描述、价格等)。
产品/views.py
class ProductListView(ListView):
queryset = Product.objects.all()
template_name = "products/list.html"
class ProductDetailView(DetailView):
queryset = Product.objects.all()
template_name = "products/detail.html"
products/urls.py 包含 ProductListView 和 ProductDetailView 视图的路径。 ProductListView 似乎是正确的。 ProductDetailView 不正确!我收到以下警告:
警告:?: (2_0.W001) 您的 URL 模式 '^products/(?P\d+)/$' [name='details'] 有一个包含 '(?P
ecommerce.py/urls.py 是我包含产品和详细信息 url 的地方
电子商务/urls.py:
from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
from .views import home, about, contact
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
path('about/', about, name='about'),
path('products/', include('products.urls'), name='products'),
path('products/', include('products.urls'), name='details'),
path('contact/', contact, name='contact'),
path('account/', include('allauth.urls'), name='login'),
path('register/', include('allauth.urls'), name='register'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
products/urls.py
from django.urls import path
from .import views
urlpatterns = [
path('', views.ProductListView.as_view(), name='products'),
path(r'^products/(?P<id>\d+)/$', views.ProductDetailView.as_view(), name='details')
]
【问题讨论】:
-
如果您想使用正则表达式来匹配您的网址,请尝试改用
re_path。或者使用路径,您应该更改为path('product/<int:id>/', ...)。 -
re_path(r'^products/(?P
\d+)/$', ProductDetailView.as_view()) 正在工作,但是有没有更清洁更有效的方法呢? path('products/ ', ProductDetailView.as_view()) 不起作用。 -
我相信这个
path('products/<int:pk>/', ProductDetailView.as_view())应该和re_path(r'^products/(?P<pk>\d+)/$', ProductDetailView.as_view())一样工作。将id更改为pk可能会起作用。 -
谢谢。 path('products/
/', ProductDetailView.as_view()) 有效。为什么 path('products/ /', ProductDetailView.as_view()) 不起作用?不是 pk == id 吗? -
让我给你一个详细的答案,让你明白为什么会这样。
标签: python django django-views django-urls