Barre de recherche

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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')
    )

Édité par Myrens

+0 -1
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte