from django.core.urlresolvers import reverse from django.core.files import File from django.core.files.temp import NamedTemporaryFile from django.core.paginator import EmptyPage from django.db import transaction from django.http import Http404 from django.shortcuts import render, redirect import requests from boards import utils, settings from boards.abstracts.paginator import get_paginator from boards.abstracts.settingsmanager import get_settings_manager from boards.models import Post, Thread, Ban, Tag, PostImage, Banner from boards.views.base import BaseBoardView from boards.views.posting_mixin import PostMixin PARAMETER_CURRENT_PAGE = 'current_page' PARAMETER_PAGINATOR = 'paginator' PARAMETER_POSTS = 'posts' PARAMETER_PREV_LINK = 'prev_page_link' PARAMETER_NEXT_LINK = 'next_page_link' TEMPLATE = 'boards/feed.html' DEFAULT_PAGE = 1 class FeedView(PostMixin, BaseBoardView): def get(self, request, page=DEFAULT_PAGE): params = self.get_context_data(request=request) settings_manager = get_settings_manager(request) paginator = get_paginator(Post.objects .exclude(threads__tags__in=settings_manager.get_hidden_tags()) .order_by('-pub_time') .prefetch_related('images', 'thread', 'threads'), 10) paginator.current_page = int(page) params[PARAMETER_POSTS] = paginator.page(page).object_list self.get_page_context(paginator, params, page) return render(request, TEMPLATE, params) # TODO Dedup this into PagedMixin def get_page_context(self, paginator, params, page): """ Get pagination context variables """ 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] = self.get_previous_page_link( current_page) if current_page.has_next(): params[PARAMETER_NEXT_LINK] = self.get_next_page_link(current_page) def get_previous_page_link(self, current_page): return reverse('feed', kwargs={ 'page': current_page.previous_page_number(), }) def get_next_page_link(self, current_page): return reverse('feed', kwargs={ 'page': current_page.next_page_number(), })