Как добавить url к вводу из формы в html-шаблоне?
У меня есть строка поиска на главной странице (http://127.0.0.1:8000/wiki/
), где я хочу, чтобы пользователи могли искать записи и получать их по url. Таким образом, если пользователь ищет css
в строке поиска, он будет перенаправлен на /wiki/css
(/wiki
нужно оставить прежним). Когда что-то ищется, url остается тем же самым, поэтому он не перенаправляется или может быть перенаправлен на ту же самую страницу.
Как добавить поисковый запрос к url, не используя другой url?
HTML:
<h2>Wiki</h2>
<form action="/wiki/" method="post">
{% csrf_token %}
<input class="search" type="text" name="q" placeholder="Search Encyclopedia">
</form>
urls.py:
urlpatterns = [
...
path('<str:name>', views.wiki_lookup, name='wiki-lookup'),
]
views.py:
from django.shortcuts import render, redirect, HttpResponse
def wiki_lookup(request):
term = request.POST.get('q', 'notfound')
return redirect('entry', name=term)
Из документации по redirect, https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirect есть три способа использования redirect.
obj = MyModel.objects.get(...)
return redirect(obj)
или
return redirect('some-view-name', foo='bar')
или
return redirect('/some/url/')
Вы используете второй вариант, где 'entry' ожидается как имя другого представления (определенного в views.py и включенного в urls.py). Что-то вроде
urls.py:
urlpatterns = [
...
path('wiki/', views.wiki_lookup, name='wiki-lookup'),
path('wiki/<slug:term>/', views.EntryDetailView.as_view(), name='entry'),
]
views.py:
from django.views.generic.detail import DetailView
class EntryDetailView(DetailView):
model = Entry
Я использовал представление на основе класса, но вы можете использовать функцию представления, которая ищет Entry, если хотите.