代码之家  ›  专栏  ›  技术社区  ›  Sergei Petrov

Django函数不返回HTML页面

  •  0
  • Sergei Petrov  · 技术社区  · 6 年前

    我正在我的网站上添加分页。这是我的职责:

    视图。py公司

    def ProductList(request, category_slug=None, page_number=1):
      content = {}
      category = None
      categories = Category.objects.all()
      products = Product.objects.filter(available=True)
      if category_slug:
          category = get_object_or_404(Category, slug=category_slug)
          products = products.filter(category=category)
      current_page = Paginator(products, 2)
      content['category'] = category
      content['categories'] = categories
      content['products'] = current_page.page(page_number)
      return render(request, 'product/list.html', content)
    

    URL。py公司

    urlpatterns = [
        url(r'^$', views.ProductList, name='ProductList'),
        url(r'^page/(\d+)/$', views.ProductList, name='ProductList'),
        url(r'^(?P<category_slug>[-\w]+)/$', views.ProductList, name='ProductListByCategory'),
        url(r'^(?P<id>\d+)/(?P<slug>[-\w]+)/$', views.ProductDetail, name='ProductDetail'),
    

    ]

    但每次我尝试获取下一页时,都会看到以下错误:

    Page not found (404)
    Request Method:     GET
    Request URL:    http://127.0.0.1:8000/page/2/
    Raised by:  shop.views.ProductList
    

    我真的不明白我做错了什么。非常感谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Daniel Roseman    6 年前

    您尚未为在正则表达式中捕获页码的组命名。因此Django将其作为位置参数而不是关键字参数传递给视图;由于请求后的第一个位置参数是 category_slug ,即编号将分配给的变量。

    要解决此问题,请使用命名参数,就像稍后对id所做的那样:

    url(r'^page/(?P<page_number>\d+)/$', views.ProductList, name='ProductList'),
    

    但请注意,页码通常作为查询字符串参数传递,而不是在URL路径本身中传递。