Frage

Ich möchte ein Suchfeld integriert in eine nav-Leiste am oberen Rand jeder Seite (hey, es ist ein Beispiel dafür, was ich bin reden, bis es oben auf dieser StackOverflow-Seite).

Vielleicht nav.html kann wie folgt Aussehen:

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

Vielleicht forms.py kann enthalten:

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

Mit dem DRY-Prinzip will ich nicht views.py auf der Suche nach einer "Abfrage" auf jeder Seite wie:

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

Ich habe und kann leicht Programm eine Seite, die sich um die Suchanfragen und Ergebnisse anzuzeigen.Wie geht man am besten entpacken Sie die Suchbegriffe ein, und weisen Sie den Benutzer an, der-Suche-Seite (return HttpResponseRedirect('/results/?query=' + query)) ohne Abisolieren der Anfrage.HOLEN Sie sich auf jeder Seite?

War es hilfreich?

Lösung

Haben Sie einfach das Suchformular ein GET auf Ihrer gemeinsamen Suche URL zu tun.

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

Verwenden Sie die URL Reverse-Lookup-Anlage, wenn Sie die URL fest zu verdrahten nicht wollen ...

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

Wenn ich die Frage falsch verstanden, es klingt wie vielleicht Sie dachten, dass Formen bekommen müssen / Post an die gleiche URL, die die aktuelle Seite geladen wird.

Andere Tipps

Wir verwenden ein Google CSE auf einer unserer Seiten und es ist ungefähr so einfach, wie Sie bekommen können.Es gibt ein paar features, die Sie aktivieren können, aber es ist trivial, und Sie erhalten alle standard-Google Güte™.

  1. Verwenden Sie separate Ansicht wie Joe Holloway vermuten lässt.
  2. Verwenden Sie bildet Leistung

    def ProductsPage(request):
        search_form = NavSearchForm(request.GET)
        if search_form.is_valid():
            ....
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top