slightly improve queries
authorymh <ymh.work@gmail.com>
Wed, 22 Jun 2011 18:34:38 +0200
changeset 54 deaa9393e6a2
parent 51 6b1338c7964c
child 55 e1098febb9d3
slightly improve queries
web/hdabo/templates/partial/tag_table.html
web/hdabo/views.py
--- a/web/hdabo/templates/partial/tag_table.html	Wed Jun 22 12:21:00 2011 +0200
+++ b/web/hdabo/templates/partial/tag_table.html	Wed Jun 22 18:34:38 2011 +0200
@@ -32,8 +32,8 @@
 	            {% endif %}
 	        </td>
 	        <td class="text_centered">
-	            {% if tag.dbpedia_uri and tag.dbpedia_uri != ""  %}
-	            <a href="{{tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
+	            {% if t.tag.dbpedia_uri and t.tag.dbpedia_uri != ""  %}
+	            <a href="{{t.tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
 	            {% else %}
 	            &nbsp;
 	            {% endif %}
@@ -62,8 +62,8 @@
 	            {% endif %}
 	        </td>
 	        <td class="text_centered">
-                {% if tag.dbpedia_uri and tag.dbpedia_uri != ""  %}
-                <a href="{{tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
+                {% if t.tag.dbpedia_uri and t.tag.dbpedia_uri != ""  %}
+                <a href="{{t.tag.dbpedia_uri}}" target="_blank"><img src="{{STATIC_URL}}hdabo/img/arrow_green_right.png" ></a>
                 {% else %}
                 &nbsp;
                 {% endif %}
--- a/web/hdabo/views.py	Wed Jun 22 12:21:00 2011 +0200
+++ b/web/hdabo/views.py	Wed Jun 22 18:34:38 2011 +0200
@@ -7,16 +7,16 @@
 from django.http import HttpResponseBadRequest
 from django.shortcuts import render_to_response, redirect
 from django.template import RequestContext
-from django.utils.http import urlquote, urlencode
+from django.utils.http import urlquote
 from haystack.constants import DJANGO_ID
 from haystack.query import SearchQuerySet
-from hdabo.wp_utils import process_tag
 from hdabo.utils import OrderedDict
-from hdabo.wp_utils import (normalize_tag, query_wikipedia_title,
-    get_or_create_tag)
+from hdabo.wp_utils import (normalize_tag, query_wikipedia_title, 
+    get_or_create_tag, process_tag)
 from models import Datasheet, Organisation, Tag, TagCategory, TaggedSheet
 from wikitools import wiki
 import django.utils.simplejson as json
+import re
 
 
 
@@ -103,20 +103,24 @@
         nb_by_page = default_nb_py_page
         num_page = 1
     
+    alltags = Tag.objects.all()
+
     if searched and searched != "" :
+        searched = searched.strip()
+        regex = "^%s$" % (re.escape(searched).replace(re.escape(star_character),".*"))
         # searched terms are word, word* or *word* (* = star_character)
-        if searched.endswith(star_character) and not searched.startswith(star_character) :
-            alltags = Tag.objects.filter(label__istartswith=searched[:-1]).order_by('label')
-        elif not searched.endswith(star_character) and searched.startswith(star_character) :
-            alltags = Tag.objects.filter(label__iendswith=searched[1:]).order_by('label')
-        elif searched.endswith(star_character) and searched.startswith(star_character) :
-            alltags = Tag.objects.filter(label__icontains=searched[1:-1]).order_by('label')
-        else :
-            alltags = Tag.objects.filter(label__iexact=searched).order_by('label')
-    else :
-        alltags = Tag.objects.order_by('label')
+#        if searched.endswith(star_character) and not searched.startswith(star_character) :
+#            alltags = alltags.filter(label__istartswith=searched[:-1])
+#        elif not searched.endswith(star_character) and searched.startswith(star_character) :
+#            alltags = alltags.filter(label__iendswith=searched[1:])
+#        elif searched.endswith(star_character) and searched.startswith(star_character) :
+#            alltags = alltags.filter(label__icontains=searched[1:-1])
+#        else :
+#            alltags = alltags.filter(label__iexact=searched)
+        alltags = alltags.filter(label__iregex=regex)
+
+    alltags = alltags.order_by('label')
         
-    nb_total = len(alltags)
     # We build the paginator for the requested list
     if nb_by_page :
         try:
@@ -132,6 +136,7 @@
             num_page = 1
     else :
         num_page = 1
+
     p = Paginator(alltags, nb_by_page)
     current_page = p.page(num_page)
     
@@ -139,45 +144,45 @@
     next_page = min(num_page + 1, p.num_pages)
     last_page = p.num_pages
     
-    search_def = (('0', urlquote('0'+star_character)),
-                  ('1', urlquote('1'+star_character)),
-                  ('2', urlquote('2'+star_character)),
-                  ('3', urlquote('3'+star_character)),
-                  ('4', urlquote('4'+star_character)),
-                  ('5', urlquote('5'+star_character)),
-                  ('6', urlquote('6'+star_character)),
-                  ('7', urlquote('7'+star_character)),
-                  ('8', urlquote('8'+star_character)),
-                  ('9', urlquote('9'+star_character)),
-                  ('A', urlquote('a'+star_character)),
-                  ('B', urlquote('b'+star_character)),
-                  ('C', urlquote('c'+star_character)),
-                  ('D', urlquote('d'+star_character)),
-                  ('E', urlquote('e'+star_character)),
-                  ('F', urlquote('f'+star_character)),
-                  ('G', urlquote('g'+star_character)),
-                  ('H', urlquote('h'+star_character)),
-                  ('I', urlquote('i'+star_character)),
-                  ('J', urlquote('j'+star_character)),
-                  ('K', urlquote('k'+star_character)),
-                  ('L', urlquote('l'+star_character)),
-                  ('M', urlquote('m'+star_character)),
-                  ('N', urlquote('n'+star_character)),
-                  ('O', urlquote('o'+star_character)),
-                  ('P', urlquote('p'+star_character)),
-                  ('Q', urlquote('q'+star_character)),
-                  ('R', urlquote('r'+star_character)),
-                  ('S', urlquote('s'+star_character)),
-                  ('T', urlquote('t'+star_character)),
-                  ('U', urlquote('u'+star_character)),
-                  ('V', urlquote('v'+star_character)),
-                  ('W', urlquote('w'+star_character)),
-                  ('X', urlquote('x'+star_character)),
-                  ('Y', urlquote('y'+star_character)),
-                  ('Z', urlquote('z'+star_character)))
+    search_def = (('0', urlquote('0' + star_character)),
+                  ('1', urlquote('1' + star_character)),
+                  ('2', urlquote('2' + star_character)),
+                  ('3', urlquote('3' + star_character)),
+                  ('4', urlquote('4' + star_character)),
+                  ('5', urlquote('5' + star_character)),
+                  ('6', urlquote('6' + star_character)),
+                  ('7', urlquote('7' + star_character)),
+                  ('8', urlquote('8' + star_character)),
+                  ('9', urlquote('9' + star_character)),
+                  ('A', urlquote('a' + star_character)),
+                  ('B', urlquote('b' + star_character)),
+                  ('C', urlquote('c' + star_character)),
+                  ('D', urlquote('d' + star_character)),
+                  ('E', urlquote('e' + star_character)),
+                  ('F', urlquote('f' + star_character)),
+                  ('G', urlquote('g' + star_character)),
+                  ('H', urlquote('h' + star_character)),
+                  ('I', urlquote('i' + star_character)),
+                  ('J', urlquote('j' + star_character)),
+                  ('K', urlquote('k' + star_character)),
+                  ('L', urlquote('l' + star_character)),
+                  ('M', urlquote('m' + star_character)),
+                  ('N', urlquote('n' + star_character)),
+                  ('O', urlquote('o' + star_character)),
+                  ('P', urlquote('p' + star_character)),
+                  ('Q', urlquote('q' + star_character)),
+                  ('R', urlquote('r' + star_character)),
+                  ('S', urlquote('s' + star_character)),
+                  ('T', urlquote('t' + star_character)),
+                  ('U', urlquote('u' + star_character)),
+                  ('V', urlquote('v' + star_character)),
+                  ('W', urlquote('w' + star_character)),
+                  ('X', urlquote('x' + star_character)),
+                  ('Y', urlquote('y' + star_character)),
+                  ('Z', urlquote('z' + star_character)))
     
     return render_to_response("all_tags.html",
-                              {'nb_total':nb_total, 'tags':current_page.object_list, 'current_page':current_page,
+                              {'nb_total':p.count, 'tags':current_page.object_list, 'current_page':current_page,
                                'prev_page':prev_page, 'next_page':next_page, 'last_page':last_page,
                                'num_page':num_page, 'nb_by_page':nb_by_page, 'searched':searched,
                                'categories':json.dumps(get_categories()),