# HG changeset patch # User cavaliet # Date 1360066617 -3600 # Node ID d65e05154aec72005793e87773b69983aa3abdf7 # Parent bb7819c8d7c26a6f9c00fb6a10411677cbfcf951 All pictures view with intelligent pagination. Css need to be improved. diff -r bb7819c8d7c2 -r d65e05154aec .pydevproject --- a/.pydevproject Tue Feb 05 11:56:59 2013 +0100 +++ b/.pydevproject Tue Feb 05 13:16:57 2013 +0100 @@ -1,6 +1,8 @@ - -python_egonomy + + + +egonomy_python python 2.7 /egonomy/src diff -r bb7819c8d7c2 -r d65e05154aec src/egonomy/static/egonomy/css/egonomy.css --- a/src/egonomy/static/egonomy/css/egonomy.css Tue Feb 05 11:56:59 2013 +0100 +++ b/src/egonomy/static/egonomy/css/egonomy.css Tue Feb 05 13:16:57 2013 +0100 @@ -169,6 +169,10 @@ float: left; margin: 2px 0 4px 12px; } +.subcol_all { + float: left; margin: 2px 0 4px 10px; width: 110px; +} + .column-third { float: left; width: 312px; } diff -r bb7819c8d7c2 -r d65e05154aec src/egonomy/templates/egonomy_all_pictures.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/templates/egonomy_all_pictures.html Tue Feb 05 13:16:57 2013 +0100 @@ -0,0 +1,48 @@ +{% extends "egonomy_base.html" %} +{% load static %} +{% load i18n %} +{% load thumbnail %} +{% load navigation %} + +{% block title %}{% trans "All pictures" %}{% endblock %} + +{% block content %} +
+
+

{% trans "All pictures" %} nb_pages = {{nb_pages}}

+ {% if nb_pages %}

{% build_pagination nb_pages page "contents_page clickable" %}

{% endif %} + + {% if nb_pages %}

{% build_pagination nb_pages page "contents_page clickable" %}

{% endif %} +
+
+{% endblock %} + diff -r bb7819c8d7c2 -r d65e05154aec src/egonomy/templates/partial/all_pictures_pagination.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/templates/partial/all_pictures_pagination.html Tue Feb 05 13:16:57 2013 +0100 @@ -0,0 +1,21 @@ +{% if nb_pages %} + {% comment %}alors ? : {{begin}} - {{middle}} - {{end}} - nb_pages = {{nb_pages}}
+ alors ? : nb_pages = {{nb_pages}} - range = {{nb_pages}} - cur_page_nb = {{cur_page_nb}}
{% endcomment %} + {% if 1 < cur_page_nb %}<< {% endif %} + {% for i in begin %} + {% if i == cur_page_nb %}{{i}}{% else %}{{i}}{% endif %}  + {% endfor %} + {% if middle %} + ... + {% for i in middle %} + {% if i == cur_page_nb %}{{i}}{% else %}{{i}}{% endif %}  + {% endfor %} + {% endif %} + {% if end %} + ... + {% for i in end %} + {% if i == cur_page_nb %}{{i}}{% else %}{{i}}{% endif %}  + {% endfor %} + {% endif %} + {% if cur_page_nb < nb_pages %}>>{% endif %} +{% endif %} \ No newline at end of file diff -r bb7819c8d7c2 -r d65e05154aec src/egonomy/templatetags/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/templatetags/__init__.py Tue Feb 05 13:16:57 2013 +0100 @@ -0,0 +1,1 @@ + diff -r bb7819c8d7c2 -r d65e05154aec src/egonomy/templatetags/navigation.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/templatetags/navigation.py Tue Feb 05 13:16:57 2013 +0100 @@ -0,0 +1,76 @@ +from django.template import Library +import re + +register = Library() + + +@register.simple_tag +def active(request, css_class, pattern, exact=True): + """ + a simple tag to test the current path and return a given css class. + Useful for navigation tabs + """ + if pattern: + if exact: + pattern = "^%s$" % pattern.lstrip("^").rstrip("$") + + if re.search(pattern, request.path): + return css_class + return '' + + +@register.inclusion_tag("partial/all_pictures_pagination.html", takes_context=True) +def build_pagination(context, nb_pages, cur_page_nb, a_class, begin_pages=2, end_pages=2, before_current_pages=2, after_current_pages=2): + # Digg-like pagination. Adapted from http://djangosnippets.org/snippets/2199/ + nb_pages = int(nb_pages) + cur_page_nb = int(cur_page_nb) + #assert False, str(nb_pages) + ', ' + str(cur_page_nb) + before = max(cur_page_nb - before_current_pages - 1, 0) + after = cur_page_nb + after_current_pages + #nb_pages = 5 + page_range = range(nb_pages+1)[1:] + #assert False, str(nb_pages) + str(page_range) + begin = page_range[:begin_pages] + #assert False, str(nb_pages) + ", " + str(page_range) + ", " + str(begin) + middle = page_range[before:after] + end = page_range[-end_pages:] + last_page_number = end[-1] + #assert False, "a - cur_page_nb = " + str(cur_page_nb) + ", before = " + str(before) + ", after = " + str(after) + ", begin = " + str(begin) + ", middle = " + str(middle) + ", end = " + str(end) + + def collides(firstlist, secondlist): + """ Returns true if lists collides (have same entries) + >>> collides([1,2,3,4],[3,4,5,6,7]) + True + >>> collides([1,2,3,4],[5,6,7]) + False + """ + return any(item in secondlist for item in firstlist) + + # If middle and end has same entries, then end is what we want + if collides(middle, end): + end = range(max(cur_page_nb-before_current_pages, 1), last_page_number+1) + middle = [] + + #assert False, "0, " + str(nb_pages) + ", " + str(page_range) + ", " + str(begin) + # If begin and middle ranges has same entries, then begin is what we want + if collides(begin, middle): + begin = range(1, min(cur_page_nb + after_current_pages - 1, last_page_number)+1) + middle = [] + #assert False, "1 - cur_page_nb = " + str(cur_page_nb) + ", before = " + str(before) + ", after = " + str(after) + ", begin = " + str(begin) + ", middle = " + str(middle) + ", end = " + str(end) + + # If begin and end has same entries then begin is what we want + if collides(begin, end): + begin = range(1, last_page_number+1) + end = [] + #assert False, "2 - " + str(nb_pages) + ", " + str(page_range) + ", " + str(begin) + + #assert False, str(nb_pages) + ", " + str(page_range) + ", " + str(begin) + + context.update({'begin' : begin, + 'middle' : middle, + 'end' : end, + 'nb_pages' : nb_pages, + 'cur_page_nb' : cur_page_nb, + 'a_class' : a_class}) + #assert False, begin + middle + end + return context diff -r bb7819c8d7c2 -r d65e05154aec src/egonomy/urls.py --- a/src/egonomy/urls.py Tue Feb 05 11:56:59 2013 +0100 +++ b/src/egonomy/urls.py Tue Feb 05 13:16:57 2013 +0100 @@ -13,6 +13,7 @@ url(r'^viewfragment/(?P.*)/$', 'egonomy.views.view_fragment', name='view_fragment'), url(r'^createfragment/(?P.*)/$', 'egonomy.views.create_fragment', name='create_fragment'), url(r'^savefragment/$', 'egonomy.views.save_fragment', name='save_fragment'), + url(r'^all/$', 'egonomy.views.all_pictures', name='all_pictures'), # Uncomment the admin/doc line below to enable admin documentation: url(r'^admin/doc/', include('django.contrib.admindocs.urls')), diff -r bb7819c8d7c2 -r d65e05154aec src/egonomy/views.py --- a/src/egonomy/views.py Tue Feb 05 11:56:59 2013 +0100 +++ b/src/egonomy/views.py Tue Feb 05 13:16:57 2013 +0100 @@ -1,8 +1,6 @@ from django.conf import settings from django.contrib.auth.decorators import login_required -#from django.contrib.auth.models import Group, User -from django.core.files.storage import FileSystemStorage -#from django.core.paginator import Paginator, InvalidPage, EmptyPage +from django.core.paginator import Paginator, InvalidPage, EmptyPage from django.shortcuts import get_object_or_404, render_to_response, redirect from django.template import RequestContext from sorl.thumbnail.images import ImageFile @@ -26,7 +24,7 @@ #img_list = Image.objects.all()[i:i+12] img_list = Image.objects.all()[:12] - frg_list = Fragment.objects.all()[:12] + frg_list = Fragment.objects.all().order_by('-date_saved')[:12] return render_to_response("egonomy_home.html", {'img_list':img_list, 'fragment_list':frg_list, "search":search, "nb_results":nb_results}, @@ -62,7 +60,7 @@ {'fragment': frg, 'fragment_list': frg_list}, context_instance=RequestContext(request)) -#@login_required +@login_required def create_fragment(request, image_id): img = get_object_or_404(Image, id=image_id) @@ -78,7 +76,7 @@ {'img': img, 'fragment_list': frg_list}, context_instance=RequestContext(request)) -#@login_required +@login_required def save_fragment(request): frg_title = request.POST["fragment_title"] @@ -101,4 +99,23 @@ return redirect("view_fragment", fragment_pk=frg.pk) +def all_pictures(request): + + # Get the page number parameter if possible + page = request.GET.get("page") or 1 + page = int(page) + + img_list = Image.objects.all() + nb = 32 + paginator = Paginator(img_list, nb) + try: + results = paginator.page(page) + except (EmptyPage, InvalidPage): + results = paginator.page(paginator.num_pages) + return render_to_response("egonomy_all_pictures.html", + {'results':results, 'nb_pages':paginator.num_pages, 'page':page}, + context_instance=RequestContext(request)) + + +