¿Cuál es la mejor manera de hacer un cuadro de búsqueda de la barra de navegación en Django?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Me gustaría tener un cuadro de búsqueda integrado en una barra de navegación que aparece en la parte superior de cada página (hey, hay un ejemplo de lo que estoy hablando al principio de esta página de StackOverflow).

Quizás el archivo nav.html puede verse como:

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

Quizás forms.py puede contener:

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

Con el principio DRY no quiero que views.py busque una 'consulta' en todas las páginas 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...

Tengo y puedo programar fácilmente una página que manejará la consulta de búsqueda y mostrará los resultados. ¿Cuál es la mejor forma de extraer los términos de búsqueda y dirigir al usuario a esa página de búsqueda (devolver HttpResponseRedirect ('/ results /? Query =' + query)) sin eliminar la solicitud.¿QUISE en cada página?

¿Fue útil?

Solución

Simplemente haga que el formulario de búsqueda haga un GET en su URL de búsqueda común.

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

Use la función de búsqueda inversa de URL si no desea cablear la URL ...

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

A menos que haya entendido mal la pregunta, parece que tal vez pensaste que los formularios deben obtenerse o publicarse en la misma URL que cargó la página actual.

Otros consejos

Utilizamos un Google CSE en uno de nuestros sitios y es lo más sencillo posible. obtener. Hay algunas características que puedes activar, pero es trivial y obtienes todo el estándar de Google Goodness ™.

  1. Use la vista separada como sugiere Joe Holloway.
  2. Usa el poder de los formularios

    def ProductsPage(request):
        search_form = NavSearchForm(request.GET)
        if search_form.is_valid():
            ....
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top