Edit: excuser moi je suis débiles je viens de capter que maintenant que ça marche très juste que je suis trop tête en l'aire pour le remarqué tout de suite que j'avais juste a mettre search_results.html dans home.html … :/
Bonjours je suis débutant en Django, et je cherche a faire une barre de rechercher pour me permettre de parcourir ma base de données, du coup j'arrive a lancer mes recherches mais j'arrive pas a afficher les résultats… je sais pas si le problème viens de l'urls.py enfin bon je suis complétement perdu surtout que je n'ai pas de traceback, je n'ai juste pas de résultat qui s'affiche l'url change mais reste sur la même page, si quel qu'un pourrais m'expliquer mon erreur ça serais cool !
le fichier search.py :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import re from django.db.models import Q def normalize_query(query_string, findterms=re.compile(r'"([^"]+)"|(\S+)').findall, normspace=re.compile(r'\s{2,}').sub): ''' Splits the query string in invidual keywords, getting rid of unecessary spaces and grouping quoted words together. Example: >>> normalize_query(' some random words "with quotes " and spaces') ['some', 'random', 'words', 'with quotes', 'and', 'spaces'] ''' return [normspace(' ', (t[0] or t[1]).strip()) for t in findterms(query_string)] def get_query(query_string, search_fields): ''' Returns a query, that is a combination of Q objects. That combination aims to search keywords within a model by testing the given search fields. ''' query = None # Query to search for every search term terms = normalize_query(query_string) for term in terms: or_query = None # Query to search for a given term in each field for field_name in search_fields: q = Q(**{"%s__icontains" % field_name: term}) if or_query is None: or_query = q else: or_query = or_query | q if query is None: query = or_query else: query = query & or_query return query |
ma vus :
1 2 3 4 5 6 7 8 9 10 11 12 13 | def home(request): query_string = '' found_entries = None if ('q' in request.GET) and request.GET['q'].strip(): query_string = request.GET['q'] entry_query = get_query(query_string, ['date', 'proposal','experiment_id','name_proposer']) found_entries = Experiment.objects.filter(entry_query) return render_to_response('data/home.html', { 'query_string': query_string, 'found_entries': found_entries }, context_instance=RequestContext(request)) |
mon fichier home.html
1 2 3 4 5 6 7 8 | <form class="" method="get" action="{% url 'search_results' %}"> <div class="input-group"> <input name="q" id="id_q" type="text" class="form-control"/> <span class="input-group-btn"> <button class="btn btn-orange" type="submit">search</button> </span> </div> </form> |
mon search_results.html :
1 2 3 4 5 6 7 8 | {% if found_entries %} <p>You searched for "{{ query_string }}".</p> <ul> {% for i in found_entries %} <li>{{ found_entries }}</li> {% endfor %} </ul> {% endif %} |
et enfin le fameux urls.py :
1 2 3 4 | urlpatterns = patterns('data.views', #url(r'^index$', 'home', name='home'), url(r'^index$', 'home',name = 'search_results') ) |