2016-04-05 3 views
0

Ich habe versucht, eine Suchfunktion für ein Blog-Projekt zu implementieren, und jetzt, dass mehrere verschiedene Implementierungen aus einer Vielzahl von Tutorials alle konsequent 404'd, unabhängig von Eingabe, ich bin auf der Suche nach der Antwort, hier .Benutzerdefinierte Suchanfrage in Django 1.9; GET-Anfragen

Hier ist derjenige, der die elementarsten mir ist, natürlich in views.py:

def search(request): 
    try: 
     q = request.GET['q'] 
     posts = Post.objects.filter(title__search=q) 
     return render_to_response('blog/search_post_list.html', {'object_list': posts, 'q':q}) 
    except KeyError: 
     return render_to_response('blog/search_post_list.html') 

In blog/urls.py: url (r '^ Suche', Suche, name = 'Suche'),

Es gibt eine Vorlage unter /templates/blog/search_post_list.html, die einen Code enthält, der {% for post in object_list %} enthält, identisch mit einer Arbeitsvorlage.

Also, um jede localhost:8000/blog/search?q=<search_query_here> gehen ist eine Django Debug-Seite mit einem 404.

Der Grund, warum ich den Code trivialer einfach gehalten habe, weil ich das Gefühl, dass es etwas jenseits der Code sein könnte, und ich Ich hoffe, dass mir jemand sagen kann, wo ich im Code nachsehen soll.

EDIT: Hier ist die 404-Seite:

Page not found (404) 
Request Method: GET 
Request URL: http://localhost:8000/blog/search?q=what 
Raised by: django.views.generic.detail.DetailView 
No post found matching the query 
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page. 

Hier ist die URL für meine Detailview, da es anscheinend genannt wurde.

url(r'^(?P<slug>[a-zA-Z0-9-]+)/?$', 
    DetailView.as_view(
    model=Post, 
    )), 
+0

Was ist der vollständige Text von der Debug-Seite 404? – Alasdair

+0

@Alasdair 'Seite nicht gefunden (404) anfordern Methode: \t GET URL anfordern: \t http: // localhost: 8000/Blog/search? Q = was Raised by: \t django.views.generic.detail. Detailansicht Kein Beitrag zu der Suchanfrage gefunden Sie sehen diesen Fehler, weil Sie DEBUG = True in Ihrer Django-Einstellungsdatei haben. Ändere das in False, und Django zeigt eine Standard-404-Seite an. " –

+0

Ich erkenne jetzt, dass ich die URL für meine Detailansicht setzen muss. Hinzufügen. –

Antwort

1

Die URL /blog/search/ wird von Ihrer Detailansicht und nicht von der Suchansicht verarbeitet. Sie erhalten dann einen 404, weil es keinen Beitrag mit slug=search gibt.

Sie können dies beheben, indem Sie das Such-URL-Muster über das Detailmuster bewegen.

+0

Ich bekomme immer noch einen Fehler: 'NotImplementedError at/Blog/Suche Volltext-Suche ist nicht für diese Datenbank-Backend implementiert Nicht einmal sicher, was das bedeutet. sqlite3 Problem? –

+1

Das ist ein ganz anderes Thema. Wie der Fehler sagt, können Sie ['__search'] (https://docs.djangoproject.com/en/1.9/ref/models/querysets/#search) nicht verwenden, da das sqlite3-Backend dies nicht unterstützt. Sie könnten statt dessen 'Post.objects.filter (title__contains = q)' eingeben. – Alasdair

+0

Danke. Kennen Sie eine gute Ressource, um ein allgemeines Bild der Abfragetypen zu erhalten, die von verschiedenen Datenbanken unterstützt werden? Außerdem habe ich versucht, 'posts + =' mit einer anderen Abfrage zu machen, in der Hoffnung, dass das Ergebnis eine geordnete Liste sein könnte, in der einige Felder höher platziert sind als andere, aber die Operation nicht unterstützt wird. Ich hoffe also, dass die Ressource Informationen enthält, die dies unterstützen würden. –

0

Versuchen Sie, diese Art und Weise url-Muster hinzuzufügen:

url(r'search/', 
    DetailView.as_view(
    model=Post, 
    )), 

(oder 'Blog/Suche /') Mit Parameter-GET-Anfrage wird wie ***/search/PARAMETER_NAME1 = value1 hinzufügen? & parameter_name2 = value2

Verwandte Themen