在 Django 上找不到页面 (404)

时间:2021-06-25 09:40:19

标签: django django-views

我正在使用 django 3.2 构建个人电子商务项目,在访问我的产品页面 url 时找不到错误页面 (404) Method:GET URL:http://127.0.0.1:8000/products 使用 main.urls 中定义的 URLconf .我遵循了所有的约定,其他页面都在工作,但是这个页面给了我一个 [urls[\views][1][browser display] 困难时期,因为我觉得一切都是正确的,我可能是错的,请帮助和如果您需要查看我的更多代码,请告诉我。

这是我的网址代码

from django.urls import path
from django.views.generic.detail import DetailView
from django.views.generic import *
from main import models, views
 
app_name = 'main'
 
urlpatterns = [
    path('', views.home, name='home'),
    path('about_us/', views.about_us, name='about_us'),
    path('contact-us/', views.ContactUsView.as_view(), name='contact_us'),
    path(
        "products/<slug:tag>/",
        views.ProductListView.as_view(),
        name="products"
        ),
    path("product/<slug:slug>/", DetailView.as_view(model=models.Product), name='product'),
]

我的视图代码

from django.views.generic.edit import FormView
from .forms import ContactForm
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.shortcuts import get_object_or_404
from main import models

class ProductListView(ListView):
    template_name = "main/product_list.html"
    paginate_by = 4

    def get_queryset(self):
        tag = self.kwargs['tag']
        self.tag = None
        if tag != "all":
            self.tag = get_object_or_404(
                models.ProductTag, slug=tag 
            )
        if self.tag:
            products = models.Product.objects.active().filter(
                tags=self.tag 
            )
        else:
            products = models.Product.objects.active()

        return products.order_by("name")

然后是我的浏览器

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/products
Using the URLconf defined in booktime.urls, Django tried these URL patterns, in this order:

admin/
[name='home']
about_us/ [name='about_us']
contact-us/ [name='contact_us']
products/<slug:tag>/ [name='products']
product/<slug:slug>/ [name='product']
^media/(?P<path>.*)$
The current path, products, didn’t match any of these.

1 个答案:

答案 0 :(得分:0)

您必须创建一个以“products/”结尾的网址路径。您创建 url 只是为了使用参数“标签”发送。 “产品/slug:标签/”

因此,将“products/”添加到以下网址的网址路径中,您将使用“http://127.0.0.1:8000/products/”进行访问

路径( “产品/”, views.ProductListView.as_view(), 名称=“产品” )