2013-05-11 1 views
0

Je suis très nouveau pour les formulaires avec django. J'ai cette méthode dans mon views.py:difficulté à implémenter django barre de recherche sur le site

def search(request): 
register.inclusion_tag('blog/search.html')(search) 
template = loader.get_template('blog/search.html') 
if request.method == 'POST': 
    form = Search(request.POST) 
    if form.is_valid(): 
     return HttpResponseRedirect('/search/?'+request.POST) 
else 
    form = Search() 
context = Context({ 
       'form':form 
       }) 
return HttpResponse(template.render(context)) 

correspondant à cette classe de formulaire:

from django import forms 

class Search(forms.form): 
    search = forms.CharField(max_length=65) 

Puis, dans mon modèle je

{% search %} 

Maintenant, je sais que je suis train épave ... Mais j'ai vraiment besoin de conseils. Cette barre de recherche existe sur tout le site. Sil te plait aide moi. Je reçois un message d'erreur très générique indiquant qu'il y a un problème avec mon module urls.py. Cependant, je sais que ce n'est pas le cas car avant que je commence à construire la partie recherche, cela a bien fonctionné.

Le point du script est d'afficher quelque chose le long des lignes de:

<input type="text" name="search" id="id_search" /> 

Selon la documentation Django.

Merci à l'avance, plus grand Noob

Répondre

3

Il a quelques questions à ce sujet - à partir de avec le fait que register.inclusion_tag est pour les balises de modèles personnalisés, qui doivent être dans une structure de répertoire spécifique. Donc, ce que je comprends, c'est que vous créez une balise de gabarit personnalisée, qui rendra votre formulaire de recherche n'importe où dans n'importe quel gabarit, en utilisant {% search %}.

Maintenant, vous pouvez créer un tag personnalisé, ou vous pouvez simplement ajouter le formulaire dans votre modèle de base et en utilisant l'héritage de modèle assurez-vous que le formulaire apparaît dans chaque page. Ma suggestion est de créer un formulaire de recherche standard, ajoutez-le à votre modèle de base (tout modèle dont tous les autres modèles hériteront). Ceci est généralement appelé _ base.html mais il peut être appelé n'importe quoi.

Alors d'abord, vous écrivez la vue:

def search(request): 
    query = request.GET.get('q') 
    if query: 
     # There was a query entered. 
     results = SomeModel.objects.filter(somefield=query) 
    else: 
     # If no query was entered, simply return all objects 
     results = SomeModel.objects.all() 
    return render(request, 'search_result.html', {'results': results}) 

Ensuite, câbler dans votre urls.py:

url(r'^search/$', 'app.views.search','search'), 

Enfin, ajoutez à votre formulaire (qui est en _ base. html):

<form method="GET" action="{% url 'search' %}"> 
     <input type="text" name="q" /> 
     <input type="submit" /> 
</form> 
Questions connexes