【发布时间】:2017-09-05 15:22:22
【问题描述】:
我正在使用 Django 分页,除了只对一页进行排序之外,一切正常。
我尝试过的:
if request.method == 'POST':
if request.POST.get('sort_by') == 'price':
products_list = Product.objects.filter(category = category).order_by('price')
selected_sort_price = "selected"
elif request.POST.get('sort_by') == 'name':
products_list = Product.objects.filter(category = category).order_by('name')
selected_sort_name = "selected"
elif request.POST.get('sort_by') == 'date':
products_list = Product.objects.filter(category = category).order_by('-id')
selected_sort_date = "selected"
show=request.POST.get('show', 5)
else:
products_list=Product.objects.filter(category = category).order_by('-id')
...
page = request.GET.get('page', 1)
paginator = Paginator(products_list, show)
try:
products = paginator.page(page)
except PageNotAnInteger:
products = paginator.page(1)
except EmptyPage:
products = paginator.page(paginator.num_pages)
上述方法仅在有post call时有效,如果没有post call,则按创建日期排序。
因此,如果用户想按价格排序,他将从下拉菜单中选择价格,onchange,表单将被提交并相应地对对象进行排序。问题是,当用户转到第二页时,一切都恢复到默认状态,因为没有进行任何 post 调用,并且没有保留以前的 post 数据。
如何使排序应用于所有页面?
寻找方向,
【问题讨论】:
-
首先,为什么要使用POST?您没有修改任何服务器数据,只是检索的参数,相当于搜索表单或类别链接。所以对于 GET,你使用
request.GET。要处理模板中的动态查询字符串,请查看 here 以获取灵感。
标签: django pagination