def groups_list(request, template='students/groups.html', page_template='students/groups_page.html', extra_context=None): groups = Group.objects.all().order_by('title') order_by = request.GET.get('order_by', '') if order_by in ('title', 'id'): groups = groups.order_by(order_by) elif order_by == 'leader': groups = groups.order_by("leader__first_name") if request.GET.get('reverse', '') == '1': groups = groups.reverse() context = {"groups": groups, 'page_template': page_template, 'start_id': (utils.get_page_number_from_request(request)-1)*15, 'per_page': 15} if extra_context is not None: context.update(extra_context) if request.is_ajax(): template = page_template return render(request, template, context)
def students_list(request, template='students/students_list.html', page_template='students/students_page.html', extra_context=None): if request.method == "POST": selected = request.POST.getlist('student_select') studlist = '/'.join(selected) studlist = studlist + "/" return HttpResponseRedirect( reverse("students_delete", kwargs={'studlist': studlist})) else: students = Student.objects.all().order_by('last_name') order_by = request.GET.get('order_by', '') if order_by in ('last_name', 'first_name', 'card', 'id'): students = students.order_by(order_by) if request.GET.get('reverse', '') == '1': students = students.reverse() context = { 'students': students, 'page_template': page_template, 'start_id': (utils.get_page_number_from_request(request) - 1) * 15, 'per_page': 15 } if extra_context is not None: context.update(extra_context) if request.is_ajax(): template = page_template return render(request, template, context)
def groups_list(request, template='students/groups.html', page_template='students/groups_page.html', extra_context=None): groups = Group.objects.all().order_by('title') order_by = request.GET.get('order_by', '') if order_by in ('title', 'id'): groups = groups.order_by(order_by) elif order_by == 'leader': groups = groups.order_by("leader__first_name") if request.GET.get('reverse', '') == '1': groups = groups.reverse() context = { "groups": groups, 'page_template': page_template, 'start_id': (utils.get_page_number_from_request(request) - 1) * 15, 'per_page': 15 } if extra_context is not None: context.update(extra_context) if request.is_ajax(): template = page_template return render(request, template, context)
def students_list(request, template='students/students_list.html', page_template='students/students_page.html', extra_context=None): if request.method == "POST": selected = request.POST.getlist('student_select') studlist = '/'.join(selected) studlist = studlist + "/" return HttpResponseRedirect(reverse("students_delete", kwargs={'studlist': studlist})) else: students = Student.objects.all().order_by('last_name') order_by = request.GET.get('order_by', '') if order_by in ('last_name', 'first_name', 'card', 'id'): students = students.order_by(order_by) if request.GET.get('reverse', '') == '1': students = students.reverse() context = {'students': students, 'page_template': page_template, 'start_id': (utils.get_page_number_from_request(request) - 1) * 15, 'per_page': 15} if extra_context is not None: context.update(extra_context) if request.is_ajax(): template = page_template return render(request, template, context)
def render(self, context): # Handle page number when it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # Calculate the number of items to show on each page. if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # Calculate the number of items to show in the first page. if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # Retrieve the override path if used. if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # The current request is used to get the requested page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) objects = self.objects.resolve(context) paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # Get the page. try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) # Populate the context with required data. data = { 'default_number': default_number, 'override_path': override_path, 'page': page, 'querystring_key': querystring_key, } context.update({'endless': data, self.var_name: page.object_list}) return u''
def render(self, context): # Handle page number when it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # Calculate the number of items to show on each page. if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # Calculate the number of items to show in the first page. if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # Retrieve the override path if used. if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # The current request is used to get the requested page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) objects = self.objects.resolve(context) paginator = self.paginator( objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # Get the page. try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) # Populate the context with required data. data = { 'default_number': default_number, 'override_path': override_path, 'page': page, 'querystring_key': querystring_key, } context.update({'endless': data, self.var_name: page.object_list}) return u''
def render(self, context): # get page number to use if it is not specified in querystring if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # get number of items to show on each page if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # get number of items to show in the first page if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # user can override settings querystring key in the template if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # request is used to get requested page number page_number = utils.get_page_number_from_request( context["request"], querystring_key, default=default_number) objects = self.objects.resolve(context) paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # get the page, user in settings can manage the case it is empty try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) # populate context with new data context["endless_default_number"] = default_number context["endless_querystring_key"] = querystring_key context["endless_page"] = page context[self.var_name] = page.object_list context["endless_override_path"] = override_path return ""
def render(self, context): # get page number to use if it is not specified in querystring if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # get number of items to show on each page if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # get number of items to show in the first page if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # user can override settings querystring key in the template if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # request is used to get requested page number page_number = utils.get_page_number_from_request(context["request"], querystring_key, default=default_number) objects = self.objects.resolve(context) paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # get the page, user in settings can manage the case it is empty try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) # populate context with new data context["endless_default_number"] = default_number context["endless_querystring_key"] = querystring_key context["endless_page"] = page context[self.var_name] = page.object_list context["endless_override_path"] = override_path return ""
def render(self, context): # get page number to use if it is not specified in querystring if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # user can override settings querystring key in the template if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) page_number = utils.get_page_number_from_request(context["request"], querystring_key, default=default_number) return unicode(page_number)
def render(self, context): # get page number to use if it is not specified in querystring if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # user can override settings querystring key in the template if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) page_number = utils.get_page_number_from_request( context["request"], querystring_key, default=default_number) return unicode(page_number)
def render(self, context): # Get the page number to use if it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # The request object is used to retrieve the current page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) if self.var_name is None: return utils.text(page_number) context[self.var_name] = page_number return ''
def render(self, context): # get page number to use if it is not specified in querystring if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # get number of items to show on each page if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # get number of items to show in the first page if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # user can override settings querystring key in the template if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # request is used to get requested page number page_number = utils.get_page_number_from_request( context["request"], querystring_key, default=default_number) objects = self.objects.resolve(context) # display page 1 to page_number, if LazyPagintator is used and the # request isnt an ajax request # eg: display pages 1 to 3 if a user requests ?page=3 with normal get # and lazy pagination is used if issubclass(self.paginator, LazyPaginator) and (context.has_key("request") and not context["request"].is_ajax()): paginator = self.paginator(objects, per_page, first_page=page_number * per_page, orphans=settings.ORPHANS) page = paginator.page(1) page.number = page_number if paginator.num_pages > 1: paginator._num_pages = page_number + 1 else: paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # get the page, user in settings can manage the case it is empty try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) # populate context with new data context["endless_default_number"] = default_number context["endless_querystring_key"] = querystring_key context["endless_page"] = page context[self.var_name] = page.object_list context["endless_override_path"] = override_path return ""
def test_post_data(self): # The page number can also be present in POST data. request = self.factory.post('/', {PAGE_LABEL: 5}) self.assertEqual(5, utils.get_page_number_from_request(request))
def test_custom_querystring_key(self): # Ensure the page returned correctly reflects the ``querystring_key``. request = self.factory.get('?mypage=4'.format(PAGE_LABEL)) page_number = utils.get_page_number_from_request( request, querystring_key='mypage') self.assertEqual(4, page_number)
def test_default(self): # Ensure the default page number is returned if page info cannot be # retrieved from the querystring. request = self.factory.get('/') page_number = utils.get_page_number_from_request(request, default=3) self.assertEqual(3, page_number)
def test_default_querystring_key(self): # Ensure the default page label is used if ``querystring_key`` # is not provided. request = self.factory.get('?{0}=2'.format(PAGE_LABEL)) self.assertEqual(2, utils.get_page_number_from_request(request))
def read_with_endless_pagination(request, **kwargs): """ Central view for ALL reading lists. """ (query_kwargs, primary_mode) = \ _rwep_generate_query_kwargs(request, **kwargs) user = request.user # —————————————————————————————————————————————————————— Search preparation search = request.GET.get('search', None) if request.is_ajax(): # Ajax requests for django-endless-pagination # infinite scrolling. Get search query if any. search = request.session.get('search', None) else: # Classic access. Update the session for # django-endless-pagination ajax requests. search_cleared = search == u'' and request.session['search'] != u'' request.session['search'] = search if search_cleared: if request.resolver_match.view_name == u'read_all': return redirect('source_selector') return redirect(request.path) # ———————————————————————————————————————————————————————————— Subscription # A “feed” (from the user point of view) is actually # a subscription (from the developer point of view). subscription = kwargs.get('feed', None) if subscription: subscription = Subscription.objects.get(id=subscription) if subscription.user != user: if user.has_staff_access: messages.warning(request, _(u'As administrator, you are ' u'accessing the feed of another user. ' u'USE WITH CAUTION.'), extra_tags='sticky') elif user.is_staff_or_superuser_and_enabled: return HttpResponseForbidden( u'Staff access explicitely ' u'denied (check config.STAFF_HAS_FULL_ACCESS)') else: return HttpResponseForbidden('Not Owner') query_kwargs[u'subscriptions'] = subscription # —————————————————————————————————————————————————————————————————— Folder folder = kwargs.get('folder', None) if folder: folder = Folder.objects.get(id=folder) if folder.user != user: if user.has_staff_access: messages.warning(request, _(u'As administrator, you are ' u'accessing the feed of another user. ' u'USE WITH CAUTION.'), extra_tags='sticky') elif user.is_staff_or_superuser_and_enabled: return HttpResponseForbidden( u'Staff access explicitely denied ' u'(check config.STAFF_HAS_FULL_ACCESS)') else: return HttpResponseForbidden('Not Owner') # LOGGER.info(u'Refining reads by folder %s', folder) query_kwargs[u'subscriptions__in'] = Subscription.objects.filter( folders__in=folder.get_descendants(include_self=True)) order_by = _rwep_generate_order_by(request, primary_mode, subscription, **kwargs) # —————————————————————————————————————————————————————————————————— Search if search: isearch = search.lower() # Implement these loops for multi-words search. for term in isearch.split(): if term.startswith(u'+'): pass elif term.startswith(u'-'): pass if subscription: user_feeds = [subscription.feed] elif folder: user_feeds = [ s.feed for s in Subscription.objects.filter(folders=folder) ] else: user_feeds = [s.feed for s in user.subscriptions] # LOGGER.info(u'Matched user feeds for search “%s”: %s', # isearch, len(user_feeds)) # NOTE: sync these filters with core.article.is_good # and core.feed.is_good matched_articles = BaseItem.objects.filter( feeds__in=user_feeds, duplicate_of=None, ).filter( # Article.translate_polymorphic_Q_object( Q(Article___url_absolute=True, Article___content_type__in=CONTENT_TYPES_FINAL) | Q(instance_of=Article) # ) ) # LOGGER.info(u'First-pass filtered articles for search “%s”: %s', # isearch, matched_articles.count()) if config.SEARCH_DB_EXTENDED_FIELDS: matched_articles = matched_articles.filter( Q(name__icontains=isearch) | ( Q(instance_of=Article) & ( Q(Article___excerpt__icontains=isearch) | Q(Article___content__icontains=isearch) ) ) | ( Q(instance_of=Email) & Q(Email___is_hidden=False) & Q(Email___content__icontains=isearch) ) ) else: matched_articles = matched_articles.filter( Q(name__icontains=isearch) ) # LOGGER.info(u'Matched articles for search “%s”: %s', # isearch, matched_articles.count()) tags = set() for term in search.split(): try: tag = Tag.objects.get(name=term) except: # Not a tag ? pass else: tags.add(tag) # ———————————————————————————————————————————————— Search final queries if tags: reads = _rwep_wrap_order_by( user.reads.filter(**query_kwargs).filter( Q(tags__in=tags) | Q(item__in=matched_articles) ).distinct(), order_by) else: reads = _rwep_wrap_order_by(user.reads.filter( item__in=matched_articles, **query_kwargs).distinct(), order_by) # ——————————————————————————————————————————————————— NO search final query else: reads = _rwep_wrap_order_by(user.reads.filter(**query_kwargs), order_by) header_text_left, header_text_right = _rwep_build_page_header_text( subscription, folder, user, primary_mode) context = { u'reads': reads, u'subscription': subscription, u'folder': folder, u'current_mode': primary_mode[0], u'mode_negated': primary_mode[1], u'search': search, # 'user' is already there, via a context processor. u'read_page_header_text_left': header_text_left, u'read_page_header_text_right': header_text_right, # are we rendering the first "main" # page, or just a subset via ajax? u'initial': False, } # ——————————————————————————————————————————————————————————— Ajax requests if request.is_ajax(): if request.GET.get('count', False): count = reads.count() # # Check and update cache counters # if search is None: try: _rwep_ajax_update_counters(kwargs, query_kwargs, user, count) except UnicodeDecodeError: pass if subscription: _rwep_special_update_counters(subscription, user) # # prepare the "inline mini-template" for ajax update. # mode, negated = primary_mode if mode == 'is_read' and not negated: mode = 'is_unread' singular_text, plural_text = READ_STATUS_DATA[mode]['list_headers'] if count == 0: rendered_text = _(u'no item') elif count == 1: rendered_text = singular_text % {'count': count} else: rendered_text = plural_text % {'count': count} return HttpResponse(rendered_text) elif request.GET.get('mark_all_read', False): latest_displayed_read = user.reads.get( item=BaseItem.objects.get( id=request.GET.get('mark_all_read'))) _rwep_ajax_mark_all_read(subscription, folder, user, latest_displayed_read) return HttpResponse('DONE') else: template = u'snippets/read/read-endless-page.html' # Computing tenths_counter here is much efficient than doing: # {% captureas tenths_counter %}{{ request.GET['page']|mul:10 }}{% endcaptureas %} # NOQA # in the template… context[u'tenths_counter'] = \ (get_page_number_from_request(request) - 1) \ * config.READ_INFINITE_ITEMS_PER_FETCH # LOGGER.info(u'Ajax with %s', context.get('tenths_counter')) # ———————————————————————————————————————————————————— Standard GET request else: template = u'read-endless.html' context[u'initial'] = True return render(request, template, context)
def read_with_endless_pagination(request, **kwargs): (query_kwargs, primary_mode) = _rwep_generate_query_kwargs(request, **kwargs) order_by = _rwep_generate_order_by(request, **kwargs) djuser = request.user user = djuser.mongo #preferences = user.preferences # —————————————————————————————————————————————————— subscription or folder # "feed" (from the user point of view) is actually # a subscription (from the developer point of view). subscription = kwargs.get('feed', None) if subscription: subscription = Subscription.get_or_404(subscription) if subscription.user != user: if user.is_staff_or_superuser_and_enabled: messages.warning(request, _(u'As administrator, you are ' u'accessing the feed of another user. ' u'USE WITH CAUTION.'), extra_tags='sticky') else: return HttpResponseForbidden('Not Owner') #LOGGER.info(u'Refining reads by subscription %s', subscription) query_kwargs[u'subscriptions__contains'] = subscription folder = kwargs.get('folder', None) if folder: folder = Folder.get_or_404(folder) if folder.owner != user: if user.is_staff_or_superuser_and_enabled: messages.warning(request, _(u'As administrator, you are ' u'accessing the feed of another user. ' u'USE WITH CAUTION.'), extra_tags='sticky') else: return HttpResponseForbidden('Not Owner') # LOGGER.info(u'Refining reads by folder %s', folder) query_kwargs[u'subscriptions__in'] = \ Subscription.objects(folders=folder) # ——————————————————————————————————————————————————————————————— the query #LOGGER.info(u'query_kwargs: %s', query_kwargs) reads = user.reads(**query_kwargs).order_by(order_by).no_cache() header_text_left, header_text_right = _rwep_build_page_header_text( subscription, folder, user, primary_mode) context = { u'reads': reads, u'subscription': subscription, u'folder': folder, u'current_mode': primary_mode[0], # 'user' is already there, via a context processor. u'read_page_header_text_left': header_text_left, u'read_page_header_text_right': header_text_right, # are we rendering the first "main" # page, or just a subset via ajax? u'initial': False, } # ——————————————————————————————————————————————————————————— Ajax requests if request.is_ajax(): if request.GET.get('count', False): count = reads.count() # # Check and update cache counters # try: _rwep_ajax_update_counters(kwargs, query_kwargs, subscription, folder, user, count) except UnicodeDecodeError: pass if subscription: _rwep_special_update_counters(subscription, user) # # prepare the "inline mini-template" for ajax update. # mode, negated = primary_mode if mode == 'is_read' and not negated: mode = 'is_unread' singular_text, plural_text = Read.status_data[mode]['list_headers'] if count == 0: rendered_text = _(u'no item') elif count == 1: rendered_text = singular_text % {'count': count} else: rendered_text = plural_text % {'count': count} return HttpResponse(rendered_text) elif request.GET.get('mark_all_read', False): latest_displayed_read = user.reads.get( article=Article.objects.get( id=request.GET.get('mark_all_read'))) _rwep_ajax_mark_all_read(subscription, folder, user, latest_displayed_read) return HttpResponse('DONE') else: template = u'snippets/read/read-endless-page.html' # Computing tenths_counter here is much efficient than doing: # {% captureas tenths_counter %}{{ request.GET['page']|mul:10 }}{% endcaptureas %} # NOQA # in the template… context[u'tenths_counter'] = \ (get_page_number_from_request(request) - 1) \ * config.READ_INFINITE_ITEMS_PER_FETCH # LOGGER.info(u'Ajax with %s', context.get('tenths_counter')) # ———————————————————————————————————————————————————— Standard GET request else: template = u'read-endless.html' context[u'initial'] = True return render(request, template, context)
def test_no_querystring_key(self): # Ensure the first page is returned if page info cannot be # retrieved from the querystring. request = self.factory.get('/') self.assertEqual(1, utils.get_page_number_from_request(request))
def render(self, context): # Handle page number when it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # Calculate the number of items to show on each page. if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # Calculate the number of items to show in the first page. if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # Retrieve the override path if used. if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # Retrieve the queryset and create the paginator object. #change for portal objects = self.objects.resolve(context) if isinstance(objects, (list, tuple)): paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) else: paginator = objects paginator.per_page = per_page paginator.first_page = first_page # Normalize the default page number if a negative one is provided. if default_number < 0: default_number = utils.normalize_page_number( default_number, paginator.page_range) # The current request is used to get the requested page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) # Get the page. #change for portal if isinstance(objects, (list, tuple)): try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) else: page = paginator.page(1) page.number = page_number # Populate the context with required data. data = { 'default_number': default_number, 'override_path': override_path, 'page': page, 'querystring_key': querystring_key, } context.update({'endless': data, self.var_name: page.object_list}) return ''
def product_results( request, current_search, template="shopping/shopping_results.html", page_template="shopping/products.html" ): # variable setups products = Products( api_key="SEM34D405CE2A6F4715E79457D08A21B4CEE", api_secret="NmI0ZDkwZmJhMGVkNGU1NWI5Y2ZmYWNkMjgzNzUyZDg" ) current_user = User.objects.get(username=request.user) form = ProductSearchForm # get user's last search and feed to Semantics3, render results query = products.products_field("name", current_search) products.get_products() # iterate over products, add to results list (position 0 in results) results = [] for i in products.iter(): results.append(i) if len(results) == 10: break # get lowest prices for each item, add to separate list (position 1 in results) lowest_prices = [] for i in results: prices = [] for store in i["sitedetails"]: prices.append("%.02f" % float(store["latestoffers"][0]["price"])) prices = sorted(prices) lowest_prices.append(prices[0]) results_master = zip(results, lowest_prices) # Django Endless Pagination (Twitter Style Reload) if request.is_ajax(): request_page = utils.get_page_number_from_request(request) offset = (request_page - 1) * 10 products.products_field("offset", offset) products.get_products() # iterate over products, apply an offset based on page number, add to results list (position 0 in results_master) results = [] for i in products.iter(): results.append(i) if len(results) == 10 + offset: break # get lowest prices for each item, add to separate list (position 1 in results_master) lowest_prices = [] for i in results: prices = [] for store in i["sitedetails"]: prices.append("%.02f" % float(store["latestoffers"][0]["price"])) prices = sorted(prices) lowest_prices.append(prices[0]) results_master = zip(results, lowest_prices) template = page_template # get search query, add to database and session, redirect if request.method == "GET": form = ProductSearchForm(request.GET) if form.is_valid(): this_search = form.cleaned_data["search"] current_search = Search(query=this_search, user=current_user) current_search.save() return HttpResponseRedirect("/shopping/results/" + this_search) if request.method == "POST": return HttpResponseRedirect("/overview/") CONTEXT = { "results": results_master, "search": current_search, "form": form, "page_template": page_template, "lowest_prices": lowest_prices, } return render(request, template, CONTEXT)
def render(self, context): # get page number to use if it is not specified in querystring if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # get number of items to show on each page if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # get number of items to show in the first page if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # user can override settings querystring key in the template if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # request is used to get requested page number page_number = utils.get_page_number_from_request(context["request"], querystring_key, default=default_number) objects = self.objects.resolve(context) # display page 1 to page_number, if LazyPagintator is used and the # request isnt an ajax request # eg: display pages 1 to 3 if a user requests ?page=3 with normal get # and lazy pagination is used if issubclass(self.paginator, LazyPaginator) and ( context.has_key("request") and not context["request"].is_ajax() ): paginator = self.paginator(objects, per_page, first_page=page_number * per_page, orphans=settings.ORPHANS) page = paginator.page(1) page.number = page_number if paginator.num_pages > 1: paginator._num_pages = page_number + 1 else: paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # get the page, user in settings can manage the case it is empty try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) # populate context with new data context["endless_default_number"] = default_number context["endless_querystring_key"] = querystring_key context["endless_page"] = page context[self.var_name] = page.object_list context["endless_override_path"] = override_path return ""
def user_content_front(request, template='instascraper/index.html', page_template='instascraper/index_page.html'): per_page = getattr(settings, 'CUSTOM_GRID_PAGINATION', 16) image_count = total_pages = 0 hashtag_filter_title = 'SHERRIHILL' prev_page = next_page = None page_number = utils.get_page_number_from_request(request) trend_default = None queries_without_page = request.GET.copy() if queries_without_page.has_key('page'): del queries_without_page['page'] try: trend_default = request.GET['trends'] except:pass recent_default = 1 #if date sort not in url, force sort by newest try: recent_default = request.GET['recent'] except: pass form = UserContentFilterForm(initial={ 'trends' : trend_default, 'recent' : recent_default, }) images = [] try: if recent_default == '2': #sort by oldest first images = InstagramImage.objects.filter(published=True).order_by("created_real") else: #sort by newest first images = InstagramImage.objects.filter(published=True).order_by("-created_real") except:pass if trend_default and images: valid_hashtag = None try: valid_hashtag = HashtagQuery.objects.get(pk=trend_default) except: pass if valid_hashtag: hashtag_filter_title = valid_hashtag.query images = images.filter(hashtag=trend_default) imglist = [] for i in images: imglist.append(i.id) slides_list = deque(imglist) slides_list.rotate(len(images)/2) total_pages = math.ceil(float(len(images)) / float(per_page)) paginator = Paginator(images, per_page) paged_images = paginator.page(page_number) if total_pages < 1: total_pages = 1 paged_url = '/%s/?page=' % 'social' if page_number < total_pages: next_page = paged_url + str(page_number + 1) if page_number > 1: prev_page = paged_url + str(page_number -1) if page_number > total_pages: raise Http404 slides_list = json.dumps(list(slides_list)) context = { 'bodyclass': 'user-content', 'pagetitle': _('#SherriHill'), 'objects' : images, 'paged_objects': paged_images, 'form' : form, 'queries' : queries_without_page, 'page_template':page_template, 'current_page_number':page_number, 'prev_page' : prev_page, 'next_page' : next_page, 'per_page' : per_page, 'total_pages': total_pages, 'slides_list': slides_list, 'hashtag_filter_title' : hashtag_filter_title, } if request.is_ajax(): template = page_template response = render_to_response(template, context_instance=RequestContext(request, context)) return response