Параметры GET кодируются в строке запроса [wiki] . Строка запроса не часть пути. Таким образом, нет способа закодировать это таким образом. Но вы действительно можете создать «представление перенаправления», которое перемещает его по пути.
Вы можете изменить перенаправление на:
# app/views.py
from django.shortcuts import redirect
def search_redir(request):
query =request.GET.get('query')
return <b>redirect('search_results', query=query)</b>
def search_results(request, query):
# …
pass
В вашем urls.py
вы затем определяете два представления : тот, который будет «перехватывать» начальный запрос GET с помощью строки запроса, а другой, в котором вы перемещаете запрос по пути:
# app/urls.py
from django.urls import path
urlpatterns = [
path('search_results/', views.search_redir, name='search_redir'),
path('search_results/<str:query>/', views.search_results, name='search_results'),
]
В вашей форме, однако, вы все равно используете представление перенаправления . Обратите внимание, что поскольку вы выполняете запрос GET, вам не нужно использовать {% csrf_token %}
:
<form action="{% url <b>'search_redir'</b> %}" method="GET">
<input name="query" type ="text"/>
<button type="submit" name="button">Search</button>
</form>