JS обновление аргумента в url

Рейтинг: 0Ответов: 1Опубликовано: 27.08.2023

Пытаюсь реализовать в python Django поиск по введенному тексту.
Идея заключается в редиректе через JS на страницу current_page/?search=<текст из input> при событии onchange.
Нижеприведенная функция search работает, но в случае повторного запроса получаю current_page/?search=<текст1>/?search=<текст2>/?...
В дальнейшем будут и другие аргументы, поэтому есть сомнения о эффективности использования регулярок.

На данный момент выглядит так:
html:

...
<div>
    <input id="search__input" type="text" onchange="search(this.value)" placeholder="Поиск...">
</div>
...

JS:

function search(to) {
    redirect('search', to);
}

function redirect(param_name, to) {
    var url = document.location.href;
    var new_url = url + '?' + param_name + '=' + to + '/';
    window.location.replace(new_url);
}

Если есть возможность реализовать это на чистом JS или вообще другим способом через Django, буду очень рад.

Ответы

▲ 0

Решил проблему путем передачи дополнительной формы в шаблон:

# forms.py

class FilterForm(forms.Form):
    name = forms.CharField(label='Name', max_length=128, required=False)
# views.py

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)

    ...

    filter_form = FilterForm(self.request.GET)

    if filter_form.is_valid():
        name = filter_form.cleaned_data['name']
        new_queryset = Employee.objects.filter(responsible=True)\
        & (Employee.objects.filter(first_name__icontains=name)\
        | Employee.objects.filter(last_name__icontains=name)\
        | Employee.objects.filter(father_name__icontains=name))
    else:
        new_queryset = Employee.objects.filter(responsible=True)
    context['form'].fields['responsible'].queryset = responsible_queryset

    context.update({
        'filter_form': filter_form,
    })

    return context
# .html

<div>
    <form action="" method="GET">
        {{ select_responsible_form.as_p }}
        <input type="submit" value="Найти">
    </form>
</div>
{% for resp in form.fields.responsible.queryset %}
    <div>
        <input type="checkbox" id="id_{{ resp.id }}" value="{{ resp.id }}">
        <label for="id_{{ resp.id }}">
            <option value="{{ resp.id }}">{{ resp }}</option>
        </label>
    </div>
{% endfor %}

Спасибо Daniil Loban, что сподвиг меня на это комментарием!)