From 3dbcda65215a960f17aed40dd514177aa546188f Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 23 Sep 2011 20:02:52 +0200 Subject: Manage pagination on jquery tables (closes #642) --- ishtar/ishtar_base/views.py | 27 ++++- ishtar/ishtar_base/widgets.py | 230 +++++++++++++++++++++--------------------- 2 files changed, 138 insertions(+), 119 deletions(-) diff --git a/ishtar/ishtar_base/views.py b/ishtar/ishtar_base/views.py index 56860fdaf..46a1b0001 100644 --- a/ishtar/ishtar_base/views.py +++ b/ishtar/ishtar_base/views.py @@ -202,6 +202,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], dct.pop(k) else: dct[k] = dct[k] == u"2" and True or False + # manage hierarchic conditions or_reqs = [] for req in dct.copy(): @@ -221,6 +222,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[], query = query & or_req items = model.objects.filter(query) q = request_items.get('sidx') + # manage sort tables if q and q in request_keys: ks = request_keys[q] @@ -236,6 +238,25 @@ def get_item(model, func_name, default_name, extra_request_keys=[], k = k.split('__')[0] orders.append(sign+k) items = items.order_by(*orders) + + # pager management + start, end = 0, None + page_nb = 1 + try: + row_nb = int(request_items.get('rows')) + except ValueError: + row_nb = None + if row_nb: + try: + page_nb = int(request_items.get('page')) + assert page_nb >= 1 + except (ValueError, AssertionError): + pass + start = (page_nb-1)*row_nb + end = page_nb*row_nb + items_nb = items.count() + items = items[start:end] + datas = [] if old: items = [item.get_previous(old) for item in items] @@ -279,8 +300,10 @@ def get_item(model, func_name, default_name, extra_request_keys=[], res[table_cols[idx].split('.')[-1]] = value rows.append(res) data = json.dumps({ - "records":len(items), - "rows":rows + "records":items_nb, + "rows":rows, + "page":page_nb, + "total":items_nb/row_nb + 1, }) return HttpResponse(data, mimetype='text/plain') elif data_type == "csv": diff --git a/ishtar/ishtar_base/widgets.py b/ishtar/ishtar_base/widgets.py index 374fde2c5..bff9aeca6 100644 --- a/ishtar/ishtar_base/widgets.py +++ b/ishtar/ishtar_base/widgets.py @@ -207,10 +207,9 @@ class JQueryJqGrid(forms.RadioSelect): def render(self, name, value=None, attrs=None): t = loader.get_template('form_snippet.html') rendered = t.render(Context({'form':self.form})) - rendered += """ - - -""" % (name, unicode(_("Search"))) + rendered += u"\n\n"\ + u"" % ( + name, unicode(_("Search"))) if self.new: model_name = self.associated_model._meta.object_name.lower() url_new = reverse('new-' + model_name) @@ -244,128 +243,125 @@ class JQueryJqGrid(forms.RadioSelect): col_names = col_names and ",\n".join(col_names) or "" col_idx = col_idx and ",\n".join(col_idx) or "" extra_cols = extra_cols and ",\n".join(extra_cols) or "" - rendered += """
-
-""" % (name, name) + rendered += u"
\n"\ + u"
\n"% (name, name) encoding = settings.ENCODING or 'utf-8' - rendered += """ -
-""" % name + rendered += u"
\n" % name if unicode(self.source_full): - rendered += """%s (%s) %s - \ -%s -""" % (unicode(_("Export as CSV")), encoding, unicode(self.source), - unicode(_(u"simple")), unicode(self.source_full), unicode(_(u"full")),) + rendered += u"%s (%s) %s - "\ + u"%s\n" % ( + unicode(_("Export as CSV")), encoding, unicode(self.source), + unicode(_(u"simple")), unicode(self.source_full), + unicode(_(u"full")),) else: - rendered += """%s (%s) -""" % (unicode(self.source), unicode(_("Export as CSV")), encoding) + rendered += u'%s (%s)\n' % ( + unicode(self.source), unicode(_("Export as CSV")), encoding) rendered += "
\n" if self.multiple: - rendered += ''' - - -''' % (name, unicode(_("Add")), name) - rendered += '' % (name, - name) - dct = {'name':name, 'col_names':col_names, 'extra_cols':extra_cols, - 'source':unicode(self.source), 'col_idx':col_idx, - 'no_result':unicode(_("No results")), 'loading':unicode(_("Loading...")), - 'remove':unicode(_(u"Remove")), 'sname':name.replace('-', ''), - 'multi_cols': ",".join((u'"%d"' % col for col in self.multiple_cols))} - rendered += """ - -""" + jQuery("#submit_form").click(function (){ + var mygrid = jQuery("#grid_%(name)s"); + jQuery("#hidden_%(name)s").val(mygrid.getGridParam('selrow')); + return true; + }); + """ % dct + rendered += "});\n\n" return mark_safe(rendered) -- cgit v1.2.3