def page(self, number, per_page): if not number: if not self._request: raise Exception('Requires with_request') number = self.get_page_from_request(self._request) if self._group_by and not self._count: qset = deepcopy(self.queryset).values(*self._group_by) if self._distinct: qset = qset.distinct() self._count = qset.count() per_page = per_page or self.PER_PAGE paginator = Paginator(self.instance.rows, per_page) if self._count: hits = max(1, self._count - paginator.orphans) paginator._num_pages = int(ceil(hits / float(per_page))) # The following line also avoids an extra (and wrong) COUNT(*) query. paginator._count = self._count try: current_page = paginator.page(number) except (EmptyPage, InvalidPage): page_number = 1 current_page = paginator.page(page_number) paginator.limited_page_range = CustomPaginator.get_page_range(paginator.num_pages, number) return current_page
def empty(request): paper = request.GET.get('tab', '') paper_order_list = ["All"] + [i[0] for i in (Lehed.objects.values_list('name'))] if paper not in paper_order_list: paper=paper_order_list[0] #Järjestuse valik page_order = request.GET.get('order', '') page_order_list = ["id", "-id", "published", "-published", "title", "-title"] if page_order not in page_order_list: page_order=page_order_list[3] category = request.GET.get('kateg', '') category_list = [ "All"] + [i[0] for i in kategooriad] #lae päris kategooriate list andmebaasist, pannes esimeseks tühjad jutumärgid if category not in category_list: category=category_list[0] #Valib esimese jupi. page_num = int(request.GET.get('page', 1)) #Jagub kolmega (praegune leht, uus leht ja vana leht) chunk_size = 30 #Siis saab jätta next ja prev nupud per_page = chunk_size/3 chunk_stop = (page_num * per_page) + per_page if page_num == 1: chunk_stop = chunk_size chunk_start = chunk_stop - chunk_size #Teeb query queryset=Lehtuudis.objects.all().order_by("-id")[chunk_start:chunk_stop] if paper == "All" and category=="All": queryset=Lehtuudis.objects.all().order_by(page_order)[chunk_start:chunk_stop] chunk_max = Uudised.objects.count() sulud = True elif paper == "All": queryset=Lehtuudis.objects.all().filter(kategooria=category).order_by(page_order)[chunk_start:chunk_stop] chunk_max = Uudised.objects.filter(kategooria=category).count() sulud = True elif category == "All": queryset=Uudised.objects.all().filter(leht=paper).order_by(page_order)[chunk_start:chunk_stop] chunk_max = Uudised.objects.filter(leht=paper).count() sulud = False else: queryset=Uudised.objects.all().filter(leht=paper).filter(kategooria=category).order_by(page_order)[chunk_start:chunk_stop] chunk_max = Uudised.objects.filter(leht=paper).filter(kategooria=category).count() sulud = False #Viimane lehekülg max_pages = math.ceil(chunk_max / per_page) fake_num = 1 if page_num == 1: chunk_stop = chunk_size chunk_start = 0 elif page_num > 1 and page_num <= max_pages: fake_num = 2 elif page_num > max_pages: fake_num = 3 #Teeb ta 5-objektisteks juppideks paginator = Paginator(queryset, per_page) paginator._num_pages = max_pages page=paginator.page(fake_num) page.number = page_num return render_to_response("empty2.html", {'kategooriad':kategooriad, 'lehed':lehed, 'page':page, 'order':page_order, 'kategooria': category, 'sulud':sulud, 'tab': paper}, context_instance=RequestContext(request), mimetype='application/xml')