我正在使用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)
以上只有在有来电的情况下才有效,如果没有后期通话,则按创建日期排序。
因此,如果用户想要按价格排序,他将从下拉菜单中选择价格,并提交onchange
表单,并相应地对对象进行排序。问题是,当用户转到第二页时,所有内容都会恢复为默认值,因为没有发布帖子调用,并且不保留以前的帖子数据。
如何使排序适用于所有页面?
寻找一些方向,
答案 0 :(得分:1)
get方法的一个例子应该是:
if reques.GET.get('sort_by'):
prince = request.GET.get('sort_by')
products_list = Product.objects.filter(category = category).order_by(price)
selected_sort_price = "selected"
我没有足够的项目信息,所以我无法帮助你。无论如何,告诉我是否有这项工作。
答案 1 :(得分:1)
在您的视图中,您应该使用GET方法获取sort_by参数,然后,您可以将sort_by返回到下一页的模板,您可以尝试:
show=request.POST.get('show', 5)
sort_by = '-id'
if reques.GET.get('sort_by'):
if reques.GET.get('sort_by') in ['price', 'name', 'date']:
sort_by= request.GET.get('sort_by')
products_list = Product.objects.filter(category=category).order_by(sort_by)
paginator = Paginator(products_list, show)
page = request.GET.get('page', 1)
try:
products = paginator.page(page)
except PageNotAnInteger:
products = paginator.page(1)
except EmptyPage:
products = paginator.page(paginator.num_pages)
return render(request, 'my_template.html', {'products': products, 'sort_by': sort_by})
在模板中,将sort_by参数添加到上一页/下一页链接:
{% for product in products %}
...
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if products.has_previous %}
<a href="?sort_by={{ sort_by }}&page={{ products.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ products.number }} of {{ products.paginator.num_pages }}.
</span>
{% if contacts.has_next %}
<a href="??sort_by={{ sort_by }}&page={{ products.next_page_number }}">next</a>
{% endif %}
</span>
</div>
我希望这很有用。