Каков наилучший способ сделать окно поиска навигационной панели в Django?
-
05-07-2019 - |
Вопрос
Я бы хотел, чтобы окно поиска было интегрировано в навигационную панель, которая появляется в верхней части каждой страницы (эй, есть пример того, о чем я говорю, в верхней части этой страницы StackOverflow). р>
Возможно, файл nav.html может выглядеть следующим образом:
<ul id="menu">
<li><a href="/products"></li>
<li><a href="/service"></li>
<li>{{ nav_search_form.as_p }}</li>
</ul>
Возможно, forms.py может содержать:
class NavSearchForm(forms.Form):
query = forms.CharField(max_length=30, required=False)
По принципу СУХОЙ я не хочу, чтобы views.py искал «запрос» на каждой странице, например:
def ProductsPage(request):
search_form = NavSearchForm()
if request.GET.has_key('query'):
query = request.GET['query'].strip()
# deal with 'Products' here...
def ServicePage(request):
search_form = NavSearchForm()
if request.GET.has_key('query'):
query = request.GET['query'].strip()
# deal with 'Service' here...
Я имею и могу легко запрограммировать страницу, которая будет обрабатывать поисковый запрос и показывать результаты. Как наилучшим образом извлечь условия поиска и направить пользователя на эту страницу поиска (вернуть HttpResponseRedirect ('/ results /? Query =' + query)), не разбирая request.GET на каждой странице?
Решение
Просто попросите форму поиска выполнить GET на вашем общем поисковом URL. Р>
<form action="/search/" method="get">
...
</form>
Используйте функцию обратного просмотра URL-адресов, если вы не хотите фиксировать URL-адрес ...
<form action="{% url my-search-view %}" method="get">
...
</form>
Если я не понял вопрос, возможно, вы подумали, что формы должны получать / отправлять на тот же URL, который загружал текущую страницу.
Другие советы
Мы используем Google CSE на одном из наших сайтов, и это настолько просто, насколько вы можете получить. Есть несколько функций, которые вы можете включить, но они тривиальны, и вы получаете все стандартные Google Goodness & # 8482;.
Используйте силу форм
def ProductsPage(request):
search_form = NavSearchForm(request.GET)
if search_form.is_valid():
....