|
|
PARAM_NEXT = 'next'
|
|
|
PARAMETER_METHOD = 'method'
|
|
|
|
|
|
PARAMETER_CURRENT_PAGE = 'current_page'
|
|
|
PARAMETER_PAGINATOR = 'paginator'
|
|
|
|
|
|
PARAMETER_PREV_LINK = 'prev_page_link'
|
|
|
PARAMETER_NEXT_LINK = 'next_page_link'
|
|
|
|
|
|
|
|
|
class DispatcherMixin:
|
|
|
"""
|
|
|
This class contains a dispather method that can run a method specified by
|
|
|
'method' request parameter.
|
|
|
"""
|
|
|
|
|
|
def __init__(self):
|
|
|
self.user = None
|
|
|
|
|
|
def dispatch_method(self, *args, **kwargs):
|
|
|
request = args[0]
|
|
|
|
|
|
self.user = request.user
|
|
|
|
|
|
method_name = None
|
|
|
if PARAMETER_METHOD in request.GET:
|
|
|
method_name = request.GET[PARAMETER_METHOD]
|
|
|
elif PARAMETER_METHOD in request.POST:
|
|
|
method_name = request.POST[PARAMETER_METHOD]
|
|
|
|
|
|
if method_name:
|
|
|
return getattr(self, method_name)(*args, **kwargs)
|
|
|
|
|
|
|
|
|
class PaginatedMixin:
|
|
|
def get_page_context(self, paginator, page):
|
|
|
"""
|
|
|
Get pagination context variables
|
|
|
"""
|
|
|
|
|
|
params = {}
|
|
|
|
|
|
params[PARAMETER_PAGINATOR] = paginator
|
|
|
current_page = paginator.page(int(page))
|
|
|
params[PARAMETER_CURRENT_PAGE] = current_page
|
|
|
if current_page.has_previous():
|
|
|
params[PARAMETER_PREV_LINK] = paginator.get_page_url(
|
|
|
current_page.previous_page_number())
|
|
|
if current_page.has_next():
|
|
|
params[PARAMETER_NEXT_LINK] = paginator.get_page_url(
|
|
|
current_page.next_page_number())
|
|
|
|
|
|
return params
|
|
|
|