Каков наилучший способ сделать окно поиска навигационной панели в Django? - PullRequest
2 голосов
/ 23 октября 2009

Мне бы хотелось, чтобы окно поиска было интегрировано в навигационную панель, которая появляется в верхней части каждой страницы (эй, есть пример того, о чем я говорю, в верхней части этой страницы 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 на каждой странице?

Ответы [ 3 ]

3 голосов
/ 23 октября 2009

Просто попросите форму поиска сделать GET на ваш общий поисковый URL.

<form action="/search/" method="get">
...
</form>

Используйте средство обратного просмотра URL-адресов, если вы не хотите фиксировать URL-адрес ...

<form action="{% url my-search-view %}" method="get">
...
</form>

Если я не понял вопрос, возможно, вы подумали, что формы должны получать / отправлять на тот же URL, который загружал текущую страницу.

0 голосов
/ 23 октября 2009
  1. Используйте отдельное представление, как предлагает Джо Холлоуэй.
  2. Использование формы питания

    def ProductsPage(request):
        search_form = NavSearchForm(request.GET)
        if search_form.is_valid():
            ....
    
0 голосов
/ 23 октября 2009

Мы используем Google CSE на одном из наших сайтов, и это настолько просто, насколько вы можете получить. Есть несколько функций, которые вы можете включить, но они тривиальны, и вы получаете все стандартные Google Goodness & trade;.

...