Quelle est la meilleure façon de faire une boîte de recherche de barre de navigation dans Django?

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

  •  05-07-2019
  •  | 
  •  

Question

Je voudrais intégrer un champ de recherche dans une barre de navigation qui apparaît en haut de chaque page (hé, il existe un exemple de ce dont je parle en haut de cette page StackOverflow).

Peut-être que le fichier nav.html ressemble à:

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

Peut-être que forms.py peut contenir:

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

Avec le principe DRY, je ne souhaite pas que views.py recherche une "requête" sur chaque page, telle que:

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

J'ai et je peux facilement programmer une page qui gérera la requête de recherche et affichera les résultats. Comment extraire au mieux les termes de la recherche et diriger l'utilisateur vers cette page de recherche (renvoyer HttpResponseRedirect ('/ results /? Query =' + query)) sans supprimer le request.GET sur chaque page?

Était-ce utile?

La solution

Il suffit que le formulaire de recherche effectue une opération GET sur votre URL de recherche commune.

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

Utilisez la fonction de recherche inversée d'URL si vous ne souhaitez pas câbler l'URL ...

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

À moins que j'ai mal compris la question, il semblerait que vous pensiez peut-être que les formulaires doivent être envoyés / envoyés à la même URL que celle qui a chargé la page en cours.

Autres conseils

Nous utilisons un Google CSE sur l'un de nos sites. Le processus est aussi simple que possible. obtenir. Vous pouvez activer certaines fonctionnalités, mais c'est simple et vous obtenez tous les avantages de Google Goodness & # 8482;.

  1. Utilisez une vue séparée, comme le suggère Joe Holloway.
  2. Utiliser le pouvoir des formulaires

    def ProductsPage(request):
        search_form = NavSearchForm(request.GET)
        if search_form.is_valid():
            ....
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top