def __init__(self, request, number, current_number, total_number, querystring_key, label=None, default_number=1, override_path=None, context=None): self._request = request self.number = number self.label = utils.text(number) if label is None else label self.querystring_key = querystring_key self.context = context or {} self.context['request'] = request self.is_current = number == current_number self.is_first = number == 1 self.is_last = number == total_number self.url = utils.get_querystring_for_page( request, number, self.querystring_key, default_number=default_number) path = iri_to_uri(override_path or request.path) self.path = '{0}{1}'.format(path, self.url)
def __init__(self, request, number, current_number, total_number, querystring_key, label=None, default_number=1, override_path=None, context=None): self._request = request self.number = number self.label = force_text(number) if label is None else label self.querystring_key = querystring_key self.context = context or {} self.context['request'] = request self.is_current = number == current_number self.is_first = number == 1 self.is_last = number == total_number if settings.USE_NEXT_PREVIOUS_LINKS: self.is_previous = label and number == current_number - 1 self.is_next = label and number == current_number + 1 self.url = utils.get_querystring_for_page( request, number, self.querystring_key, default_number=default_number) path = iri_to_uri(override_path or request.path) self.path = '{0}{1}'.format(path, self.url)
def show_more_info(context, label=None, loading=settings.LOADING, class_name=None): data = utils.get_data_from_context(context) page = data['page'] if page.has_next(): request = context['request'] page_number = page.next_page_number() querystring_key = data['querystring_key'] querystring = utils.get_querystring_for_page( request, page_number, querystring_key, default_number=data['default_number']) return { 'label': label, 'loading': loading, 'class_name': class_name, 'path': iri_to_uri(data['override_path'] or request.path), 'querystring': querystring, 'querystring_key': querystring_key, 'request': request, } return {}
def __init__( self, request, number, current_number, total_number, querystring_key, label=None, default_number=1, override_path=None, context=None): self._request = request self.number = number self.label = force_text(number) if label is None else label self.querystring_key = querystring_key self.context = context or {} self.context['request'] = request self.is_current = number == current_number self.is_first = number == 1 self.is_last = number == total_number if settings.USE_NEXT_PREVIOUS_LINKS: self.is_previous = label and number == current_number - 1 self.is_next = label and number == current_number + 1 self.url = utils.get_querystring_for_page( request, number, self.querystring_key, default_number=default_number ) path = iri_to_uri(override_path or request.path) self.path = '{0}{1}'.format(path, self.url)
def test_default_page(self): # Ensure the querystring is empty for the default page. request = self.factory.get('/') querystring = utils.get_querystring_for_page(request, 3, 'mypage', default_number=3) self.assertEqual('', querystring)
def custom_show_more(context, label=None, loading=settings.LOADING, class_name=None): """Show the link to get the next page in a Twitter-like pagination. Usage:: {% show_more %} Alternatively you can override the label passed to the default template:: {% show_more "even more" %} You can override the loading text too:: {% show_more "even more" "working" %} You could pass in the extra CSS style class name as a third argument {% show_more "even more" "working" "class_name" %} Must be called after ``{% paginate objects %}``. """ # This template tag could raise a PaginationError: you have to call # *paginate* or *lazy_paginate* before including the showmore template. data = utils.get_data_from_context(context) page = data['page'] # show the template only if there is a next page if page.has_next(): request = context['request'] page_number = page.next_page_number() # Generate the querystring. querystring_key = data['querystring_key'] querystring = utils.get_querystring_for_page( request, page_number, querystring_key, default_number=data['default_number']) return { 'label': label, 'loading': loading, 'class_name': class_name, 'path': iri_to_uri(data['override_path'] or request.path), 'querystring': querystring, 'querystring_key': querystring_key, 'request': request, } # No next page, nothing to see. return {}
def __init__( self, request, number, current_number, total_number, querystring_key, label=None, default_number=1, override_path=None): self._request = request self.number = number self.label = utils.text(number) if label is None else label self.querystring_key = querystring_key self.is_current = number == current_number self.is_first = number == 1 self.is_last = number == total_number self.url = utils.get_querystring_for_page( request, number, self.querystring_key, default_number=default_number) path = iri_to_uri(override_path or request.path) self.path = '{0}{1}'.format(path, self.url)
def show_more(context, label=None, loading=settings.LOADING, class_name=None): """Show the link to get the next page in a Twitter-like pagination. Usage:: {% show_more %} Alternatively you can override the label passed to the default template:: {% show_more "even more" %} You can override the loading text too:: {% show_more "even more" "working" %} You could pass in the extra CSS style class name as a third argument {% show_more "even more" "working" "class_name" %} Must be called after ``{% paginate objects %}``. """ # This template tag could raise a PaginationError: you have to call # *paginate* or *lazy_paginate* before including the showmore template. data = utils.get_data_from_context(context) page = data['page'] # show the template only if there is a next page if page.has_next(): request = context['request'] page_number = page.next_page_number() # Generate the querystring. querystring_key = data['querystring_key'] querystring = utils.get_querystring_for_page( request, page_number, querystring_key, default_number=data['default_number']) return { 'label': label, 'loading': loading, 'class_name': class_name, 'path': iri_to_uri(data['override_path'] or request.path), 'querystring': querystring, 'querystring_key': querystring_key, 'request': request, } # No next page, nothing to see. return {}
def show_more_custom(context, label=None, items_ids=None, length=None, items_count=None, loading=settings.LOADING): data = utils.get_data_from_context(context) page = data['page'] query = None if page.has_next(): request = context['request'] page_number = page.next_page_number() items_shown = 10 * (page_number - 1) if not page_number: items_shown = items_count # pagination = context['pagination'] if not items_ids: if context.get('search_query'): query = context.get('search_query') querystring_key = data['querystring_key'] context['override_path'] = "/catalog-sort-item/" context['override_path'] = "/catalog-sort-item/" querystring = utils.get_querystring_for_page( request, page_number, querystring_key, default_number=data['default_number']) return { 'label': label, 'loading': loading, 'path': iri_to_uri(context.get('instance_path') or request.path), 'ajax_path': iri_to_uri( context.get("override_path") or context.get('instance_path') or request.path), 'querystring': querystring + context.get("extra_querystring", ""), 'querystring_key': querystring_key, 'request': request, 'page_number': page_number, 'length': length, 'items_ids': items_ids, 'items_count': items_count, 'items_shown': items_shown, 'query': query, # 'pagination': pagination , } return { 'length': length, 'items_count': items_count, 'items_shown': items_count, 'items_ids': items_ids, 'page': page, }
def test_querystring_key(self): # The querystring key is deleted from the querystring if present. request = self.factory.get('/?querystring_key=mykey') querystring = utils.get_querystring_for_page(request, 5, 'mypage') self.assertEqual('?mypage=5', querystring)
def test_composition(self): # Ensure existing querystring is correctly preserved. request = self.factory.get('/?mypage=1&foo=bar') querystring = utils.get_querystring_for_page(request, 4, 'mypage') self.assertIn('mypage=4', querystring) self.assertIn('foo=bar', querystring)
def test_default_page(self): # Ensure the querystring is empty for the default page. request = self.factory.get('/') querystring = utils.get_querystring_for_page( request, 3, 'mypage', default_number=3) self.assertEqual('', querystring)
def test_querystring(self): # Ensure the querystring is correctly generated from request. request = self.factory.get('/') querystring = utils.get_querystring_for_page(request, 2, 'mypage') self.assertEqual('?mypage=2', querystring)