Я понимаю, что сбивается url, но не знаю, как это исправить. Искать буду долго. А так подскажет кто, может.
<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>
пагинация
<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>
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)
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)'], ])
urls.py
url(r'^(?P<slug>[\w-]+)$', index, name="products_list"),
Когда делаю сортировку, страница тут же перезагружается и загружается страница с отсортированными объектами. (url включает в себя способ сортировки)
Но, когда я перехожу на другую страницу этого блока, этот фильтр с адреса url исчезает и соответственно сортировка тоже исчезает.