pagination for renkan list
authorcavaliet
Mon, 08 Sep 2014 13:03:36 +0200
changeset 331 306b95944074
parent 330 5c171e379ea2
child 332 cb26b3124850
pagination for renkan list
src/hdalab/settings.py
src/hdalab/static/hdalab/css/profile.css
src/hdalab/templates/editorial/manage_renkans.html
src/hdalab/templates/profile_home.html
src/hdalab/templates/renkan_list.html
src/hdalab/views/editorial.py
src/hdalab/views/profile.py
--- a/src/hdalab/settings.py	Fri Sep 05 17:05:48 2014 +0200
+++ b/src/hdalab/settings.py	Mon Sep 08 13:03:36 2014 +0200
@@ -153,6 +153,7 @@
 
 SEARCH_STAR_CHARACTER = "*"
 PAGINATION_DEFAULT_NB_BY_PAGE = 50
+RENKANS_PER_PAGE = 3
 
 # User class after migration to django > 1.6.5
 AUTH_USER_MODEL = 'hdabo.User'
--- a/src/hdalab/static/hdalab/css/profile.css	Fri Sep 05 17:05:48 2014 +0200
+++ b/src/hdalab/static/hdalab/css/profile.css	Mon Sep 08 13:03:36 2014 +0200
@@ -12,6 +12,9 @@
   border-bottom:1pt solid #555;
   padding: 5px;
 }
+th a {
+  float: left;
+}
 .renkan-basic-action{
 	float: left;
 	margin-right: 5px;
--- a/src/hdalab/templates/editorial/manage_renkans.html	Fri Sep 05 17:05:48 2014 +0200
+++ b/src/hdalab/templates/editorial/manage_renkans.html	Mon Sep 08 13:03:36 2014 +0200
@@ -13,24 +13,26 @@
     <link rel="stylesheet" type="text/css" href="{% static 'hdalab/css/profile.css' %}" />
 {% endblock %}
 
-{% block js_import %}
-{{block.super}}
-    <script src="{% static 'hdalab/js/profile.js' %}"></script>
-    <script src="{% static 'hdalab/lib/jquery.tablesorter.min.js' %}"></script> 
-    <script type="text/javascript">
-    $(document).ready(function(){
-        $("#rk-table").tablesorter({headers: { 3: { sorter: false }, 5: { sorter: false } }}); 
-    });
-    </script>
-{% endblock %}
-
 {% block main_content %}
+    <p>{% if page.has_previous %}<a href="?page={{ page.previous_page_number }}&sort={{ sort_param }}&order={{ order_param }}" >{% trans 'Previous' %}</a>{% endif %}
+       {% if page.has_previous and page.has_next %} - {% endif %}{% if page.has_next %}<a href="?page={{ page.next_page_number }}&sort={{ sort_param }}&order={{ order_param }}">{% trans 'Next' %}</a>{% endif %}</p>
     <table id="rk-table">
       <thead>
-        <tr class="border_bottom"><th>Nom</th><th>Utilisateur</th><th>Date de modification</th><th>Preview</th><th>Statut</th><th>Actions</th></tr>
+        <tr class="border_bottom">
+          <th><a class="" href="?sort=title&order={% if sort_param == 'title' %}{{ opposite }}{% else %}asc{% endif %}">{% trans 'Title' %}</a>
+              {% if sort_param == 'title' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th><a href="?sort=user&order={% if sort_param == 'user' %}{{ opposite }}{% else %}desc{% endif %}">{% trans 'User' %}</a>
+              {% if sort_param == 'user' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th><a href="?sort=date&order={% if sort_param == 'date' %}{{ opposite }}{% else %}desc{% endif %}">{% trans 'Modification date' %}</a>
+              {% if sort_param == 'date' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th>{% trans 'Preview' %}</th>
+          <th><a href="?sort=state&order={% if sort_param == 'state' %}{{ opposite }}{% else %}asc{% endif %}">{% trans 'State' %}</a>
+              {% if sort_param == 'state' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th>{% trans 'Actions' %}</th>
+        </tr>
       </thead>
       <tbody>
-      {% for hr in renkan_list %}
+      {% for hr in page.object_list %}
        {% with hr.renkan as r %}
         <tr class="border_bottom">
             <td>{{ r.title }}</td>
@@ -49,4 +51,6 @@
       {% endfor %}
       </tbody>
     </table>
+    <p>{% if page.has_previous %}<a href="?page={{ page.previous_page_number }}&sort={{ sort_param }}&order={{ order_param }}" >{% trans 'Previous' %}</a>{% endif %}
+       {% if page.has_previous and page.has_next %} - {% endif %}{% if page.has_next %}<a href="?page={{ page.next_page_number }}&sort={{ sort_param }}&order={{ order_param }}">{% trans 'Next' %}</a>{% endif %}</p>
 {% endblock %}
\ No newline at end of file
--- a/src/hdalab/templates/profile_home.html	Fri Sep 05 17:05:48 2014 +0200
+++ b/src/hdalab/templates/profile_home.html	Mon Sep 08 13:03:36 2014 +0200
@@ -13,18 +13,6 @@
     <link rel="stylesheet" type="text/css" href="{% static 'hdalab/css/profile.css' %}" />
 {% endblock %}
 
-{% block js_import %}
-{{block.super}}
-    <script src="{% static 'hdalab/js/profile.js' %}"></script>
-    <script src="{% static 'hdalab/lib/jquery.tablesorter.min.js' %}"></script>
-    <script type="text/javascript">
-    $(document).ready(function(){ 
-        console.log("hi");
-        $("#rk-table").tablesorter({headers: { 2: { sorter: false }, 4: { sorter: false } }}); 
-    });
-    </script>
-{% endblock %}
-
 {% block profile_actif %}actif{% endblock %}
 
 {% block main_content %}
@@ -32,12 +20,23 @@
     <p><a href="{% url 'renkan_new' %}" >Nouveau Renkan</a> - <a href="{% url 'auth_password_change' %}">Modification du mot de passe</a></p>
     <p>&nbsp;</p>
     <p>Mes renkans : </p>
+    <p>{% if page.has_previous %}<a href="?page={{ page.previous_page_number }}&sort={{ sort_param }}&order={{ order_param }}" >{% trans 'Previous' %}</a>{% endif %}
+       {% if page.has_previous and page.has_next %} - {% endif %}{% if page.has_next %}<a href="?page={{ page.next_page_number }}&sort={{ sort_param }}&order={{ order_param }}">{% trans 'Next' %}</a>{% endif %}</p>
     <table id="rk-table">
       <thead>
-        <tr class="border_bottom"><th>Nom</th><th>Date de modification</th><th>Preview</th><th>Statut</th><th>Actions</th></tr>
+        <tr class="border_bottom">
+          <th><a href="?sort=title&order={% if sort_param == 'title' %}{{ opposite }}{% else %}asc{% endif %}">{% trans 'Title' %}</a>
+              {% if sort_param == 'title' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th><a href="?sort=date&order={% if sort_param == 'date' %}{{ opposite }}{% else %}desc{% endif %}">{% trans 'Modification date' %}</a>
+              {% if sort_param == 'date' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th>{% trans 'Preview' %}</th>
+          <th><a href="?sort=state&order={% if sort_param == 'state' %}{{ opposite }}{% else %}asc{% endif %}">{% trans 'State' %}</a>
+              {% if sort_param == 'state' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th>{% trans 'Actions' %}</th>
+        </tr>
       </thead>
       <tbody>
-      {% for hr in renkan_list %}
+      {% for hr in page.object_list %}
        {% with hr.renkan as r %}
         <tr class="border_bottom">
             <td>{{ r.title }}</td>
@@ -58,4 +57,6 @@
       {% endfor %}
       </tbody>
     </table>
+    <p>{% if page.has_previous %}<a href="?page={{ page.previous_page_number }}&sort={{ sort_param }}&order={{ order_param }}" >{% trans 'Previous' %}</a>{% endif %}
+       {% if page.has_previous and page.has_next %} - {% endif %}{% if page.has_next %}<a href="?page={{ page.next_page_number }}&sort={{ sort_param }}&order={{ order_param }}">{% trans 'Next' %}</a>{% endif %}</p>
 {% endblock %}
\ No newline at end of file
--- a/src/hdalab/templates/renkan_list.html	Fri Sep 05 17:05:48 2014 +0200
+++ b/src/hdalab/templates/renkan_list.html	Mon Sep 08 13:03:36 2014 +0200
@@ -12,31 +12,26 @@
     <link rel="stylesheet" type="text/css" href="{% static 'hdalab/css/profile.css' %}" />
 {% endblock %}
 
-{% block js_import %}
-{{block.super}}
-    <script src="{% static 'hdalab/js/profile.js' %}"></script>
-    <script src="{% static 'hdalab/lib/jquery.tablesorter.min.js' %}"></script>
-    <script type="text/javascript">
-    $(document).ready(function(){ 
-        console.log("hi");
-        $("#rk-table").tablesorter({headers: { 2: { sorter: false }, 4: { sorter: false } }}); 
-    });
-    </script>
-{% endblock %}
-
 {% block renkans_actif %}actif{% endblock %}
 
 {% block main_content %}
     <h2>Liste des renkans publiques</h2>
+    <p>{% if page.has_previous %}<a href="?page={{ page.previous_page_number }}&sort={{ sort_param }}&order={{ order_param }}" >{% trans 'Previous' %}</a>{% endif %}
+       {% if page.has_previous and page.has_next %} - {% endif %}{% if page.has_next %}<a href="?page={{ page.next_page_number }}&sort={{ sort_param }}&order={{ order_param }}">{% trans 'Next' %}</a>{% endif %}</p>
     <table id="rk-table">
       <thead>
-        <tr class="border_bottom"><th>Nom</th><th>Date de modification</th><th>Preview</th><th>Actions</th></tr>
+        <tr class="border_bottom">
+          <th><a class="" href="?sort=title&order={% if sort_param == 'title' %}{{ opposite }}{% else %}asc{% endif %}">{% trans 'Title' %}</a>
+              {% if sort_param == 'title' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th><a href="?sort=date&order={% if sort_param == 'date' %}{{ opposite }}{% else %}desc{% endif %}">{% trans 'Modification date' %}</a>
+              {% if sort_param == 'date' %}<span class="ui-icon {% if opposite == 'asc' %}ui-icon-triangle-1-s{% else %}ui-icon-triangle-1-n{% endif %}"></span>{% endif %}</th>
+          <th>Preview</th><th>Actions</th></tr>
       </thead>
       <tbody>
-      {% for hr in renkan_list %}
+      {% for hr in page.object_list %}
        {% with hr.renkan as r %}
         <tr class="border_bottom">
-            <td>{{ r.title }} ({{ r.id }})</td>
+            <td>{{ r.title }}</td>
             <td>{{ r.modification_date|date:"Y-m-d H:i" }}</td>
             <td>{% thumbnail r.image 100x100 as thumb %}<img src="{{ thumb.url }}" width="{{ thumb.width }}" height="{{ thumb.height }}" /></td>
             <td>
@@ -48,4 +43,6 @@
       {% endfor %}
       </tbody>
     </table>
+    <p>{% if page.has_previous %}<a href="?page={{ page.previous_page_number }}&sort={{ sort_param }}&order={{ order_param }}" >{% trans 'Previous' %}</a>{% endif %}
+       {% if page.has_previous and page.has_next %} - {% endif %}{% if page.has_next %}<a href="?page={{ page.next_page_number }}&sort={{ sort_param }}&order={{ order_param }}">{% trans 'Next' %}</a>{% endif %}</p>
 {% endblock %}
\ No newline at end of file
--- a/src/hdalab/views/editorial.py	Fri Sep 05 17:05:48 2014 +0200
+++ b/src/hdalab/views/editorial.py	Mon Sep 08 13:03:36 2014 +0200
@@ -10,6 +10,8 @@
 from hdabo.views import Folders, AddOrUpdateFolder, DeleteFolder
 
 import logging
+from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
+from django.conf import settings
 logger = logging.getLogger(__name__)
 
 
@@ -19,7 +21,27 @@
     def get_context_data(self, **kwargs):
         context = super(ManageRenkans, self).get_context_data(**kwargs)
         
-        context["renkan_list"] = HdalabRenkan.objects.exclude(state=HdalabRenkan.EDITION).select_related("renkan", "renkan__owner").order_by("-renkan__modification_date")
+        sort_param = self.request.GET.get('sort', "date")
+        order_param = self.request.GET.get('order', "desc")
+        sort = {"date":"renkan__modification_date", "title":"renkan__title", "state":"state", "user":"renkan__owner__username"}.get(sort_param)
+        if order_param=="desc":
+            order = "-"
+            opposite = "asc"
+        else:
+            order = ""
+            opposite = "desc"
+        
+        rl = HdalabRenkan.objects.exclude(state=HdalabRenkan.EDITION).select_related("renkan", "renkan__owner").order_by(order + sort)
+        p = Paginator(rl, settings.RENKANS_PER_PAGE)
+        page_nb = self.request.GET.get('page')
+        try:
+            page = p.page(page_nb)
+        except PageNotAnInteger:
+            page = p.page(1)
+        except EmptyPage:
+            page = p.page(p.num_pages)
+        
+        context.update({"page": page, "sort_param":sort_param, "order_param":order_param, "opposite":opposite})
         
         return context
 
--- a/src/hdalab/views/profile.py	Fri Sep 05 17:05:48 2014 +0200
+++ b/src/hdalab/views/profile.py	Mon Sep 08 13:03:36 2014 +0200
@@ -37,6 +37,7 @@
 
 import logging
 from django.http.response import Http404
+from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
 logger = logging.getLogger(__name__)
 
 
@@ -46,7 +47,28 @@
     
     def get_context_data(self, **kwargs):
         context = super(ProfileHome, self).get_context_data(**kwargs)
-        context['renkan_list'] = HdalabRenkan.objects.select_related("renkan").filter(renkan__owner=self.request.user).order_by("-renkan__modification_date")
+        
+        sort_param = self.request.GET.get('sort', "date")
+        order_param = self.request.GET.get('order', "desc")
+        sort = {"date":"renkan__modification_date", "title":"renkan__title", "state":"state"}.get(sort_param)
+        if order_param=="desc":
+            order = "-"
+            opposite = "asc"
+        else:
+            order = ""
+            opposite = "desc"
+        
+        rl = HdalabRenkan.objects.select_related("renkan").filter(renkan__owner=self.request.user).order_by(order + sort)
+        p = Paginator(rl, settings.RENKANS_PER_PAGE)
+        page_nb = self.request.GET.get('page')
+        try:
+            page = p.page(page_nb)
+        except PageNotAnInteger:
+            page = p.page(1)
+        except EmptyPage:
+            page = p.page(p.num_pages)
+        
+        context.update({"page": page, "sort_param":sort_param, "order_param":order_param, "opposite":opposite})
         return context
 
 
@@ -56,7 +78,30 @@
     
     def get_context_data(self, **kwargs):
         context = super(RenkanPublicList, self).get_context_data(**kwargs)
-        context['renkan_list'] = HdalabRenkan.objects.select_related("renkan").filter(state=HdalabRenkan.PUBLISHED).order_by("-renkan__modification_date")
+        #context['renkan_list'] = HdalabRenkan.objects.select_related("renkan").filter(state=HdalabRenkan.PUBLISHED).order_by("-renkan__modification_date")
+        
+        sort_param = self.request.GET.get('sort', "date")
+        order_param = self.request.GET.get('order', "desc")
+        sort = {"date":"renkan__modification_date", "title":"renkan__title", "state":"state"}.get(sort_param)
+        if order_param=="desc":
+            order = "-"
+            opposite = "asc"
+        else:
+            order = ""
+            opposite = "desc"
+        
+        rl = HdalabRenkan.objects.select_related("renkan").filter(state=HdalabRenkan.PUBLISHED).order_by(order + sort)
+        p = Paginator(rl, settings.RENKANS_PER_PAGE)
+        page_nb = self.request.GET.get('page')
+        try:
+            page = p.page(page_nb)
+        except PageNotAnInteger:
+            page = p.page(1)
+        except EmptyPage:
+            page = p.page(p.num_pages)
+        
+        context.update({"page": page, "sort_param":sort_param, "order_param":order_param, "opposite":opposite})
+        
         return context