Pergunta

Eu gostaria de ter uma caixa de pesquisa integrada em uma barra de navegação que aparece no topo de cada página (hey, há um exemplo do que eu estou falando lá em cima no topo desta página StackOverflow).

Talvez a nav.html pode ser parecido com:

<ul id="menu">
    <li><a href="/products"></li>
    <li><a href="/service"></li>
    <li>{{ nav_search_form.as_p }}</li>
</ul>

Talvez forms.py pode conter:

class NavSearchForm(forms.Form):
  query = forms.CharField(max_length=30, required=False)

Com o princípio de DRY Eu não quero views.py estar à procura de uma 'consulta' em cada página como:

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...

eu tenho e pode facilmente programar uma página que irá lidar com a consulta de pesquisa e mostrar resultados. Como você melhor extrair os termos de pesquisa e direcionar o usuário para a página de pesquisa (retorno HttpResponseRedirect ( '/ resultados /? Query =' + query)) sem descascar a request.GET em cada página?

Foi útil?

Solução

Basta ter o formulário de busca fazer um GET em seu URL de pesquisa comum.

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

Use o URL de pesquisa inversa instalação se você não quer hardwire o URL ...

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

A menos que eu mal a questão, parece que talvez você estava pensando que as formas têm de GET / POST para o mesmo URL que carregou a página atual.

Outras dicas

Nós usamos um Google CSE em um dos nossos sites e é sobre tão simples como você pode obter. Há um par de características que você pode ligar, mas é trivial e você terá toda a bondade padrão do Google ™.

  1. Use exibição separada como Joe Holloway sugere.
  2. Use forma de energia

    def ProductsPage(request):
        search_form = NavSearchForm(request.GET)
        if search_form.is_valid():
            ....
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top