decorators.py 832 Bytes
# -*- coding: utf-8 -*-

from functools import wraps
from django.core.urlresolvers import reverse

def paginated(func):
  "Decorator to be used on view functions that use pagination"
  @wraps(func)
  def new_func(request, *args, **kwargs):
    output = func(request, *args, **kwargs)
    if not isinstance(output, dict):
      return output
    paginer = output['paginer']
    js_vars = output.get('js_vars', {})
    js_vars['paginer'] = dict((id, (d['type'], d['params'], d['action'],
                                    d['group_actions']))
      for (id, d) in paginer.dict.iteritems())
    js_vars['original_paginer'] = js_vars['paginer']
    js_vars['ajax_paginer'] = reverse('get_page_content')
    js_vars['ajax_new_filter_row'] = reverse('new_filter_row')
    output['js_vars'] = js_vars
    return output
  return new_func