【问题标题】:Django function doesn't return HTML pageDjango 函数不返回 HTML 页面
【发布时间】:2018-04-14 22:44:20
【问题描述】:

我正在我的网站上添加分页。这是我的功能:

views.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)

urls.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

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

【问题讨论】:

  • 请显示您的其余网址。此代码引发的唯一 404 位于 category_slug 块中,因此您的页面参数似乎被解释为类别。
  • 这是我的完整网址:urlpatterns = [ url(r'^$', views.ProductList, name='ProductList'), url(r'^page/(\d+)/$' , views.ProductList, name='ProductList'), url(r'^(?P[-\w]+)/$', views.ProductList, name='ProductListByCategory'), url(r'^ (?P\d+)/(?P[-\w]+)/$', views.ProductDetail, name='ProductDetail'), ]

标签: python django pagination


【解决方案1】:

您尚未为在您的正则表达式中捕获页码的组命名。所以 Django 将它作为位置参数而不是关键字参数传递给视图;并且由于请求后的第一个位置参数是category_slug,这就是数字将被分配给的变量。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2018-08-27
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    相关资源
    最近更新 更多