Каков наилучший способ сделать окно поиска навигационной панели в Django?

StackOverflow https://stackoverflow.com/questions/1610934

  •  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():
            ....
    
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top