Feb-12-2019, 06:40 PM
Hi. I write the pagination and and sorting. But sorting getting off, when I switch page Django 1.11...
forms.py
But when I switch page, I have a url: https://127.0.0.1:8000/products/ice-cream?page=2 and sorting is getting off. How I get additional path from sorting (https://127.0.0.1:8000/products/ice-cream?page=2 + &ordering=name, mb?)
forms.py
from django import forms class FilterForm(forms.Form): ordering = forms.ChoiceField(label="сортировка", required=False, choices=[ ['name', 'Name (A-Z)'], ['-name', 'Name (Z-A)'], ['default_action_price', 'Price (Low > High)'], ['-default_action_price', 'Price (High > Low)'], ['rating', 'Rating (Highest)'], ['-rating', 'Rating (Lowest)'], ])views.py
def index(request, slug, page_number=1): categories = Category.objects.all() subcategories = Subcategory.objects.all() category_item = Subcategory.objects.filter(slug=slug) all_products = Product.objects.all() page = request.GET.get('page', 1) paginator = Paginator(all_products, 2) try: productpages = paginator.page(page) except PageNotAnInteger: productpages = paginator.page(1) except EmptyPage: productpages = paginator.page(paginator.num_pages) form = FilterForm(request.GET) if form.is_valid(): if form.cleaned_data["ordering"]: all_products = all_products.order_by(form.cleaned_data["ordering"]) context = { 'categories': categories, 'subcategories': subcategories, 'category_item': category_item, 'productpages': productpages, 'all_products_count': all_products.count(), 'start_index': productpages.start_index(), 'end_index': productpages.end_index(), } return render(request, 'products_list.html', context)sorting
<div class="pull-right"> <form action="" method="GET"> <select class="form-control input-sm" name="ordering" id="id_ordering" onchange='this.form.submit()'> <option value="" selected="selected">Default</option> <option value="name">Name (A-Z)</option> <option value="-name">Name (Z-A)</option> <option value="default_action_price">Price (Low > High)</option> <option value="-default_action_price">Price (High > Low)</option> <option value="rating">Rating (Highest)</option> <option value="-rating">Rating (Lowest)</option> </select> <noscript><input type="submit" value="Submit"></noscript> </form> </div>pagination
<div class="row"> <div class="col-md-4 col-sm-4 items-info">Items {{ start_index }} to {{ end_index }} of {{ all_products_count }} total</div> <div class="col-md-8 col-sm-8"> {% if productpages.has_other_pages %} <ul class="pagination pull-right"> {% if productpages.has_previous %} <li><a href="?page={{ productpages.previous_page_number }}">«</a></li> {% else %} <li class="disabled"><span>«</span></li> {% endif %} {% for i in productpages.paginator.page_range %} {% if productpages.number == i %} <li><span>{{ i }} <span class="sr-only">(current)</span></span></li> {% else %} <li><a href="?page={{ i }}">{{ i }}</a></li> {% endif %} {% endfor %} {% if productpages.has_next %} <li><a href="?page={{ productpages.next_page_number }}">»</a></li> {% else %} <li class="disabled"><span>»</span></li> {% endif %} </ul> {% endif %} </div> </div>urls.py
url(r'^(?P<slug>[\w-]+)$', index, name="products_list"),For example, first page have a url: https://127.0.0.1:8000/products/ice-cream?ordering=name.
But when I switch page, I have a url: https://127.0.0.1:8000/products/ice-cream?page=2 and sorting is getting off. How I get additional path from sorting (https://127.0.0.1:8000/products/ice-cream?page=2 + &ordering=name, mb?)