Fin de la fonctionnalite de pagination

This commit is contained in:
Fred Pauchet 2012-07-18 12:03:10 +02:00
parent 36fa059237
commit 1220aa8a11
7 changed files with 69 additions and 22 deletions

View File

@ -5,4 +5,4 @@ admin.site.register(Category)
admin.site.register(SubCategory)
admin.site.register(Country)
admin.site.register(Tag)
admin.site.register(Item)
admin.site.register(Card)

View File

@ -107,7 +107,7 @@ class Command(BaseCommand):
Insère un item provenant de GCStar dans la base de données.
"""
i = Item()
i = Card()
country, created = Country.objects.get_or_create(label=item.country.strip())
i.country = country

View File

@ -49,7 +49,7 @@ class Tag(models.Model):
def __unicode__(self):
return self.label
class Item(models.Model):
class Card(models.Model):
country = models.ForeignKey(Country, verbose_name='Pays')
subcategory = models.ForeignKey(SubCategory, verbose_name='Thème')

View File

@ -0,0 +1,29 @@
from django import template
from django.conf import settings
from cards.models import Country, Category
register = template.Library()
def get_range(value):
"""
See http://djangosnippets.org/snippets/1357/
Filter - returns a list containing range made from given value
Usage (in template):
<ul>{% for i in 3|get_range %}
<li>{{ i }}. Do something</li>
{% endfor %}</ul>
Results with the HTML:
<ul>
<li>0. Do something</li>
<li>1. Do something</li>
<li>2. Do something</li>
</ul>
Instead of 3 one may use the variable set in the views
"""
return range(1, value + 1 )
register.filter(get_range)

View File

@ -6,21 +6,21 @@ from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django import forms
from cards.models import Item, Country, Category, SubCategory
from cards.models import Card, Country, Category, SubCategory
from django.core.context_processors import csrf
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
import cards.forms
def index(request):
cards_list = Item.objects.order_by('-created_at')[:25]
cards_list = Card.objects.order_by('-created_at')[:25]
context = { 'cards_list' : cards_list}
return render_to_response('cards/index.html', RequestContext(request, context))
def details(request, item_id):
a = get_object_or_404(Item, pk=item_id)
def details(request, card_id):
a = get_object_or_404(Card, pk=card_id)
context = {'card': a }
@ -37,6 +37,8 @@ def pagination(cards_list, request):
cards = paginator.page(1)
except EmptyPage:
cards = paginator.page(paginator.num_pages)
except:
cards = paginator.page(1)
return cards
@ -55,7 +57,7 @@ def query(request):
for term in terms.split(' '):
q.add((Q(label__icontains=term) | Q(subcategory__label__icontains=term) | Q(subcategory__category__label__icontains=term) | Q(country__label__icontains=term) ), q.AND)
cards_list = Item.objects.filter(q)
cards_list = Card.objects.filter(q)
cards = pagination(cards_list, request)
@ -92,7 +94,7 @@ def advanced_query(request):
# la date de début
# faut modifier le modèle ici...
cards_list = Item.objects.filter(q)
cards_list = Card.objects.filter(q)
cards_list = pagination(cards_list, request)
@ -110,7 +112,7 @@ def advanced_query(request):
def search_by_country(request, country_id):
country = get_object_or_404(Country, pk=country_id)
cards = pagination(country.item_set.all(), request)
cards = pagination(country.card_set.all(), request)
context = { 'cards' : cards, 'title' : country.label }
@ -122,7 +124,7 @@ def search_by_category(request, category_id):
cards_list = list()
for subcat in category.subcategory_set.all():
cards_list.extend(subcat.item_set.all())
cards_list.extend(subcat.card_set.all())
cards = pagination(cards_list, request)
@ -133,7 +135,7 @@ def search_by_category(request, category_id):
def search_by_subcategory(request, subcategory_id):
subcategory = get_object_or_404(SubCategory, pk=subcategory_id)
cards = pagination(subcategory.item_set.all(), request)
cards = pagination(subcategory.card_set.all(), request)
context = { 'cards' : cards, 'title' : subcategory.label }

View File

@ -1,13 +1,14 @@
{% extends 'base.html' %}
{% load image_tags %}
{% load filter_tags %}
{% block main_container %}
<h2>{{title}}</h2>
<ul class="thumbnails">
{% for card in cards %}
{% for card in cards.object_list %}
<li class="span2">
<a href="{% url card-details card.id %}" class="thumbnail">
{% if card.image %}
@ -18,18 +19,33 @@
{% endfor %}
</ul>
<div class="pagination">
<div class="pagination" style="margin: 0 auto; display: inline-block; text-align: center;">
<span class="step-links">
{% if cards.has_previous %}
<a href="?page={{ cards.previous_page_number }}">page précédente</a>
<a href="?page={{ cards.previous_page_number }}">«</a>
{% else %}
<span class="disabled">
<a href="?page={{ cards.previous_page_number }}">«</a>
</span>
{% endif %}
<span class="current">
Page {{ cards.number }} de {{ cards.paginator.num_pages }}.
</span>
{% for page_num in cards.paginator.num_pages|get_range %}
{% if page_num == cards.number %}
<span class="active">
<a class="active" href="?page={{ page_num }}">{{ page_num }}</a>
</span>
{% else %}
<a href="?page={{ page_num }}">{{ page_num }}</a>
{% endif %}
{% endfor %}
{% if cards.has_next %}
<a href="?page={{ cards.next_page_number }}">page suivante</a>
<a href="?page={{ cards.next_page_number }}">»</a>
{% else %}
<span class="disabled">
<a href="?page={{ cards.next_page_number }}">»</a>
</span>
{% endif %}
</span>
</div>

View File

@ -10,7 +10,7 @@ urlpatterns = patterns('',
# url(r'^$', 'xcards.views.home', name='home'),
# url(r'^xcards/', include('xcards.foo.urls')),
url(r'^details/(?P<item_id>\d+)/$', 'cards.views.details', name='card-details'),
url(r'^details/(?P<card_id>\d+)/$', 'cards.views.details', name='card-details'),
url(r'^query/$', 'cards.views.query'),
url(r'^advanced-query/$', 'cards.views.advanced_query', name='advanced-query'),
url(r'^list/country/(?P<country_id>\d+)/$', 'cards.views.search_by_country', name='list-by-country'),