Сортировка результатов поиска

Я начинаю изучать Django и столкнулся с такой проблемой: я не могу добавить параметры к ссылке
Пример:
Ссылка до изменения:

http://127.0.0.1:8000/?brand=&search=

Ссылка после изменения:

http://127.0.0.1:8000/?brand=&search=&sort=

Что я получаю:

http://127.0.0.1:8000/?sort=

Как это реализовать?

views.py

def filters(request):
    #search
    search_post = request.GET.get('search', '')
    if search_post:
        all = Product.objects.filter(Q(title__icontains=search_post) & Q(content__icontains=search_post)).order_by()
    else:
        all = Product.objects.all()

    #sort by price
    sort_by = request.GET.get("sort", '')
    if sort_by == "l2h":
        all = Product.objects.all()
        all = all.extra(order_by = ['-price'])
    elif sort_by == "h2l":
        all = Product.objects.all().order_by('price')

    filters = IndexFilter(request.GET, queryset=all)

    context = {
        'filters': filters
    }
    return render(request, 'index.html', context)

urls.py

from django.urls import path

from .views import *
urlpatterns = [
    path('', filters, name='filters')
]

index.html

<form method="get" action="{% url 'filters' %}">
        {{ filters.form }}
        <input class="form-control mr-sm-2" type="search"   placeholder="Search" aria-label="Search" name="search">
        <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
        <a class="filter_by" href="?sort=l2h">Price:--low to high</a>
        <a class="filter_by" href="?sort=h2l">Price:-- high to low</a>
    </form>

Вы определили 2 тега якоря в своем коде, которые полностью изменяют URL и не добавляют новые параметры запроса к URL.

<a class="filter_by" href="?sort=l2h">Price:--low to high</a>
<a class="filter_by" href="?sort=h2l">Price:-- high to low</a>

Что вам нужно сделать, это написать некоторый код javascript и использовать URLSearchParams для добавления этого вида к существующим параметрам url.

Используйте этот ответ для добавления параметров в url.

Вернуться на верх