##// END OF EJS Templates
Merged with default
Merged with default

File last commit:

r1302:57fd9a18 default
r1320:c450e81f merge decentral
Show More
feed.py
81 lines | 2.8 KiB | text/x-python | PythonLexer
from django.core.urlresolvers import reverse
from django.shortcuts import render
from boards.abstracts.paginator import get_paginator
from boards.abstracts.settingsmanager import get_settings_manager
from boards.models import Post
from boards.views.base import BaseBoardView
from boards.views.posting_mixin import PostMixin
POSTS_PER_PAGE = 10
PARAMETER_CURRENT_PAGE = 'current_page'
PARAMETER_PAGINATOR = 'paginator'
PARAMETER_POSTS = 'posts'
PARAMETER_ADDITONAL_ATTRS = 'additional_attrs'
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 = request.GET.get('page', DEFAULT_PAGE)
tripcode = request.GET.get('tripcode', None)
params = self.get_context_data(request=request)
settings_manager = get_settings_manager(request)
posts = Post.objects.exclude(
threads__tags__in=settings_manager.get_hidden_tags()).order_by(
'-pub_time').prefetch_related('images', 'thread', 'threads')
if tripcode:
posts = posts.filter(tripcode=tripcode)
paginator = get_paginator(posts, POSTS_PER_PAGE)
paginator.current_page = int(page)
params[PARAMETER_POSTS] = paginator.page(page).object_list
additional_params = dict()
if tripcode:
additional_params['tripcode'] = tripcode
params[PARAMETER_ADDITONAL_ATTRS] = '&tripcode=' + tripcode
self.get_page_context(paginator, params, page, additional_params)
return render(request, TEMPLATE, params)
# TODO Dedup this into PagedMixin
def get_page_context(self, paginator, params, page, additional_params):
"""
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)
for param in additional_params.keys():
params[PARAMETER_PREV_LINK] += '&{}={}'.format(
param, additional_params[param])
if current_page.has_next():
params[PARAMETER_NEXT_LINK] = self.get_next_page_link(current_page)
for param in additional_params.keys():
params[PARAMETER_NEXT_LINK] += '&{}={}'.format(
param, additional_params[param])
def get_previous_page_link(self, current_page):
return reverse('feed') + '?page={}'.format(
current_page.previous_page_number())
def get_next_page_link(self, current_page):
return reverse('feed') + '?page={}'.format(
current_page.next_page_number())