from django import forms
from datamaster_modeles.models import Thematique, Pays, Region
from models import Evenement, Discipline, Record
+from savoirs.lib.recherche import build_search_regexp
# Formulaires de recherche
"""Retourne une expression régulière compilée qui peut servir à
chercher les mot-clés recherchés dans un texte."""
if self.is_valid():
- words = self.cleaned_data['q'].split()
- if not words:
- return None
- parts = []
- for word in words:
- part = re.escape(word.lower())
- # Les expressions régulières ne connaissent pas la version
- # en majuscules des caractères accentués. :(
- part = part.replace(u'à', u'[àÀ]')
- part = part.replace(u'â', u'[âÂ]')
- part = part.replace(u'é', u'[éÉ]')
- part = part.replace(u'ê', u'[êÊ]')
- part = part.replace(u'î', u'[îÎ]')
+ return build_search_regexp(self.cleaned_data['q'])
- # Faire ceci après avoir traité les caractères accentués...
- part = part.replace('a', u'[aàâÀÂ]')
- part = part.replace('e', u'[eéèëêÉÊ]')
- part = part.replace('i', u'[iïîÎ]')
- part = part.replace('o', u'[oô]')
- part = part.replace('u', u'[uûüù]')
-
- parts.append(part)
- return re.compile('|'.join(parts), re.I)
###
class EvenementForm(forms.ModelForm):
sep_search (page, q, rc)
return rc
+
+def build_search_regexp(query):
+ """Construit une expression régulière qui peut servir à chercher les
+ mots-clés donnés dans 'query'."""
+ words = query.split()
+ if not words:
+ return None
+ parts = []
+ for word in words:
+ part = re.escape(word.lower())
+ # Les expressions régulières ne connaissent pas la version
+ # en majuscules des caractères accentués. :(
+ part = part.replace(u'à', u'[àÀ]')
+ part = part.replace(u'â', u'[âÂ]')
+ part = part.replace(u'é', u'[éÉ]')
+ part = part.replace(u'ê', u'[êÊ]')
+ part = part.replace(u'î', u'[îÎ]')
+
+ # Faire ceci après avoir traité les caractères accentués...
+ part = part.replace('a', u'[aàâÀÂ]')
+ part = part.replace('e', u'[eéèëêÉÊ]')
+ part = part.replace('i', u'[iïîÎ]')
+ part = part.replace('o', u'[oô]')
+ part = part.replace('u', u'[uûüù]')
+
+ parts.append(part)
+ return re.compile('|'.join(parts), re.I)
from django.core.urlresolvers import reverse
from django import forms
from django.conf import settings
-from lib.recherche import cherche, google_search
+from lib.recherche import cherche, google_search, build_search_regexp
from lib import sep
from lib.calendrier import evenements, evenement_info, combine
from savoirs.globals import configuration
# recherche
def recherche (request):
- q = request.GET.get("q", "")
- page = int(request.GET.get("page", 0))
-
- r = cherche (page, q)
-
- return render_to_response ("savoirs/recherche.html", \
- Context ({'q': q,
- 'page': page,
- 'data': r}), \
- context_instance = RequestContext(request))
+ query = request.GET.get("q", "")
+ ressources = Record.objects.search(query)
+ search_regexp = build_search_regexp(query)
+ return render_to_response(
+ "savoirs/recherche.html",
+ {'q': query, 'ressources': ressources[:5],
+ 'nb_ressources': len(ressources), 'search_regexp': search_regexp},
+ context_instance = RequestContext(request)
+ )
def avancee (request):
type = request.GET.get("type", "")
</script>
-<h4>Résultats de recherche pour « {{ q }} » :</h4>
-
+{% if ressources %}
+<h4>Ressources correspondant à « {{ q }} » ({{ ressources|length }} sur {{ nb_ressources }}):</h4>
<div class="zone-texte">
- {% for r in data.results %}
- {% include "savoirs/resultat.html" %}
- {% empty %}
- <div class="resultatRecherche">
- <h2>Aucun résultat trouvé</h2>
- </div>
+ {% for ressource in ressources %}
+ {% include "savoirs/ressource_resultat.html" %}
{% endfor %}
+ <a href="{% url savoirs.views.ressource_index %}?q={{ q|urlencode }}">Toutes les {{ nb_ressources }} ressources correspondant à « {{ q }} »</a>
</div>
-<div class="resultatPages">
- <span id="pageLinks">
- </span>
-</div>
+{% endif %}
{% if user.is_authenticated %}
{% include "savoirs/editor.html" %}
{% extends "container_base.html" %}
{% load pagination_tags %}
-{% load search %}
{% block contenu %}
<h4>Ressources</h4>
<p><strong>{{ nb_resultats }} ressources correspondant à votre recherche :</strong></p>
<div class="centre">{% paginate %}</div>
<div class="zone-texte">
- {% for r in ressources %}
- <div class="resultatRecherche">
- <a class="le-titre" href="{{ r.uri }}">{{ r.title|highlight:search_regexp }}</a>
- {% if r.creator %}
- <div><span class="lbl">Auteur:</span> {{ r.creator|highlight:search_regexp }}</div>
- {% endif %}
- {% if r.description %}
- <div class="resultatResume"><span class="lbl">Description:</span> {{ r.description|excerpt:search_regexp|highlight:search_regexp }}</div>
- {% endif %}
- </div>
+ {% for ressource in ressources %}
+ {% include "savoirs/ressource_resultat.html" %}
{% empty %}
<div class="resultatRecherche">
<h2>Aucun résultat trouvé</h2>
--- /dev/null
+{% load search %}
+
+<div class="resultatRecherche">
+ <a class="le-titre" href="{{ ressource.uri }}">{{ ressource.title|highlight:search_regexp }}</a>
+ {% if ressource.creator %}
+ <div><span class="lbl">Auteur:</span> {{ ressource.creator|highlight:search_regexp }}</div>
+ {% endif %}
+ {% if ressource.description %}
+ <div class="resultatResume"><span class="lbl">Description:</span> {{ ressource.description|excerpt:search_regexp|highlight:search_regexp }}</div>
+ {% endif %}
+</div>