Как передать параметр страницы в тег шаблона Django url?
Я создаю простое поисковое приложение. У меня есть модель с некоторыми данными, а индексная страница - это просто строка поиска, которая ищет результаты по этой модели. Я создаю форму, используя просто HTML, а не правильную Django Form.
index.html:
<form method="get" action="{% url 'core:search' %}?page=1&q={{ request.GET.q }}">
<div class="form-floating mb-3">
<input type="search" class="form-control" id="floatingInput" name="q" value="{{ request.GET.q }}">
<label for="floatingInput">Type your search</label>
</div>
<button class="w-100 btn btn-lg btn-primary" type="submit">Search</button>
</form>
Результаты постраничные, поэтому мне нужно, чтобы url, запрашиваемый формой, был http://127.0.0.1:8000/search/?page=1&q=query
, query
- это поисковый запрос, введенный в input. Но то, что я написал в параметре action
в форме, не работает так, как я ожидал: несмотря на то, что написано action="{% url 'core:search' %}?page=1&q={{ request.GET.q }}
, запрашиваемый URL просто http://127.0.0.1:8000/search/?q=query
. Параметр page
просто не отображается.
Я написал page=1
, потому что, как и результат поиска, первая запрашиваемая страница всегда первая.
Представление, которое обрабатывает этот запрос - search_view
. Я помещаю это ниже просто как дополнительную информацию, но я думаю, что проблема заключается в моем непонимании тега шаблона url
в параметре формы action
.
search_view:
def search_view(request):
posts = Post.objects.all()
query = request.GET.get('q')
page_num = request.GET.get('page')
paginator = Paginator(posts.annotate(
search=SearchVector('post_title', 'post_subtitle'),
).filter(search=query).order_by('post_title'), 15)
num_results = paginator.count
num_pages = paginator.num_pages
try:
posts = paginator.page(page_num)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
context = {
'posts': posts,
'num_results': num_results,
'num_pages': num_pages,
'page_range': paginator.page_range,
}
return render(request, 'core/search.html', context)
Как сделать так, чтобы запрашиваемый URL имел вид http://127.0.0.1:8000/search/?page=1&q=query
?