Skip to content

Instantly share code, notes, and snippets.

@absyah
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save absyah/51e5e74d6bc3d027304f to your computer and use it in GitHub Desktop.
Save absyah/51e5e74d6bc3d027304f to your computer and use it in GitHub Desktop.
Book list
class BookListView(ListViewPublic):
def get(self, request, *args, **kwargs):
t = loader.get_template('core/reader/index.html')
filter_kwargs = {
'status': Book.STATUS.public,
}
form = SearchForm(load_all=True)
books = Book.objects.filter(**filter_kwargs)
c = Context({ 'form': form, 'books':books })
if self.request.user.is_authenticated():
if request.user.is_administrator:
return redirect('/admin')
elif request.user.is_author:
return redirect('/author')
else:
return render_to_response('core/reader/index.html', c, context_instance=RequestContext(request))
else:
return render_to_response('core/reader/index.html', c, context_instance=RequestContext(request))
@register.inclusion_tag('bootstraptags/pagination.html')
def pagination(page_obj, params=None, size=None, align=None, page_kwarg='page', num_items=7):
pagination_classes = ['pagination']
if size in ('large', 'small', 'mini'):
pagination_classes.append('pagination-%s' % size)
if align in ('centered', 'right'):
pagination_classes.append('pagination-%s' % align)
paginator = page_obj.paginator
num_items = int(num_items)
def build_url_param(params, page_kwarg):
if params is None:
params = QueryDict('')
params = params.copy()
if params.has_key(page_kwarg):
params.pop(page_kwarg)
params.appendlist(page_kwarg, '')
return '?%s' % params.urlencode()
pagination_classes = ' '.join(pagination_classes)
url_param = build_url_param(params, page_kwarg)
is_first = page_obj.number == 1
is_last = page_obj.number == paginator.num_pages
page_range = paginator.page_range
has_back = False
has_forward = False
if len(page_range) > num_items:
start = page_obj.number - (num_items / 2)
start = max(start, 1)
start = min(start, paginator.num_pages - num_items + 1)
page_range = range(start, start + num_items)
has_back = start > 1
has_forward = start < paginator.num_pages - num_items + 1
return {
'page_obj': page_obj,
'pagination_class': pagination_classes,
'url_param': url_param,
'is_first': is_first,
'is_last': is_last,
'has_back': has_back,
'has_forward': has_forward,
'page_range': page_range
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment