# HG changeset patch # User cavaliet # Date 1308758002 -7200 # Node ID 1f01957a3eaed11ca63e7f75da1b326f8ac8de15 # Parent 6b1338c7964c306d5a021d06d3e31a8d0621f378 Add popularity and number of datasheet for one tag. "Unduplication" of some code in views.py. diff -r 6b1338c7964c -r 1f01957a3eae web/hdabo/templates/partial/all_tags_table.html --- a/web/hdabo/templates/partial/all_tags_table.html Wed Jun 22 12:21:00 2011 +0200 +++ b/web/hdabo/templates/partial/all_tags_table.html Wed Jun 22 17:53:22 2011 +0200 @@ -7,7 +7,9 @@ Lien D Catégorie Supprimer
le lien W - Alias + Alias + Nb de
fiches + Popularité {% for tag in tags %} {{tag.id}} @@ -29,7 +31,9 @@ {% if tag.category %}{{ tag.category }}{% endif %} {{tag.label}} - {% if tag.alias %}{{tag.alias}}{% endif %} + {% if tag.alias %}{{tag.alias}}{% endif %} + {{tag.num_ds}} + {{tag.popularity}} {% endfor %} {% endblock %} diff -r 6b1338c7964c -r 1f01957a3eae web/hdabo/views.py --- a/web/hdabo/views.py Wed Jun 22 12:21:00 2011 +0200 +++ b/web/hdabo/views.py Wed Jun 22 17:53:22 2011 +0200 @@ -3,7 +3,7 @@ from django.conf import settings from django.contrib.auth.decorators import login_required #@UnusedImport from django.core.paginator import Paginator -from django.db.models import Max +from django.db.models import Max, Count from django.http import HttpResponseBadRequest from django.shortcuts import render_to_response, redirect from django.template import RequestContext @@ -96,49 +96,21 @@ def all_tags(request, num_page=None, nb_by_page=None, searched=None): default_nb_py_page = 50 - star_character = "*" # If the view is asked after a form sent with post vars, it means that searched is a post var. if u"searched" in request.POST : searched = request.POST["searched"] nb_by_page = default_nb_py_page num_page = 1 - if searched and searched != "" : - # 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') - - nb_total = len(alltags) - # We build the paginator for the requested list - if nb_by_page : - try: - nb_by_page = int(nb_by_page) - except : - nb_by_page = default_nb_py_page - else : - nb_by_page = default_nb_py_page - if num_page : - try: - num_page = int(num_page) - except : - num_page = 1 - else : - num_page = 1 - p = Paginator(alltags, nb_by_page) - current_page = p.page(num_page) + # Get paginator and current page + current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, searched) + nb_total = p.count prev_page = max(num_page - 1, 1) next_page = min(num_page + 1, p.num_pages) last_page = p.num_pages + star_character = "*" search_def = (('0', urlquote('0'+star_character)), ('1', urlquote('1'+star_character)), ('2', urlquote('2'+star_character)), @@ -232,20 +204,31 @@ #@login_required def get_all_tags_table(request, num_page=None, nb_by_page=None, searched=None): + current_page, p, num_page, nb_by_page = get_current_page(num_page, nb_by_page, searched) + + return render_to_response("partial/all_tags_table.html", + {'tags':current_page.object_list}, + context_instance=RequestContext(request)) + + +#@login_required +def get_current_page(num_page=None, nb_by_page=None, searched=None): + default_nb_py_page = 50 star_character = "*" if searched and searched != "" : # 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') + alltags = Tag.objects.filter(label__istartswith=searched[:-1]) elif not searched.endswith(star_character) and searched.startswith(star_character) : - alltags = Tag.objects.filter(label__iendswith=searched[1:]).order_by('label') + alltags = Tag.objects.filter(label__iendswith=searched[1:]) elif searched.endswith(star_character) and searched.startswith(star_character) : - alltags = Tag.objects.filter(label__icontains=searched[1:-1]).order_by('label') + alltags = Tag.objects.filter(label__icontains=searched[1:-1]) else : - alltags = Tag.objects.filter(label__iexact=searched).order_by('label') + alltags = Tag.objects.filter(label__iexact=searched) else : - alltags = Tag.objects.order_by('label') + alltags = Tag.objects.all() + alltags = alltags.annotate(num_ds=Count('datasheet')).order_by('-popularity','-num_ds','label') # We build the paginator for the requested list if nb_by_page : @@ -265,9 +248,7 @@ p = Paginator(alltags, nb_by_page) current_page = p.page(num_page) - return render_to_response("partial/all_tags_table.html", - {'tags':current_page.object_list}, - context_instance=RequestContext(request)) + return current_page, p, num_page, nb_by_page #@login_required