|
|
from datetime import datetime
|
|
|
from datetime import timedelta
|
|
|
|
|
|
from django.db.models import Count, Q
|
|
|
from django.shortcuts import render
|
|
|
from django.utils.decorators import method_decorator
|
|
|
from django.views.decorators.csrf import csrf_protect
|
|
|
|
|
|
from boards import settings
|
|
|
from boards.models import Post, Tag, STATUS_ACTIVE, TagAlias
|
|
|
from boards.settings import SECTION_VIEW
|
|
|
from boards.views.base import BaseBoardView
|
|
|
|
|
|
PARAM_SECTION_STR = 'section_str'
|
|
|
PARAM_LATEST_THREADS = 'latest_threads'
|
|
|
PARAM_LATEST_POSTS = 'latest_posts'
|
|
|
|
|
|
TEMPLATE = 'boards/landing.html'
|
|
|
|
|
|
|
|
|
class LandingView(BaseBoardView):
|
|
|
@method_decorator(csrf_protect)
|
|
|
def get(self, request):
|
|
|
params = dict()
|
|
|
|
|
|
params[PARAM_SECTION_STR] = Tag.objects.get_tag_url_list(
|
|
|
Tag.objects.filter(Q(aliases__in=TagAlias.objects.filter_localized()) & Q(required=True))
|
|
|
.order_by('aliases__name'))
|
|
|
|
|
|
today = datetime.now() - timedelta(1)
|
|
|
ops = Post.objects.filter(thread__replies__pub_time__gt=today, opening=True, thread__status=STATUS_ACTIVE)\
|
|
|
.annotate(today_post_count=Count('thread__replies'))\
|
|
|
.order_by('-pub_time')
|
|
|
|
|
|
max_landing_threads = settings.get_int(SECTION_VIEW, 'MaxLandingThreads')
|
|
|
if max_landing_threads > 0:
|
|
|
ops = ops[:max_landing_threads]
|
|
|
|
|
|
params[PARAM_LATEST_THREADS] = ops
|
|
|
|
|
|
max_landing_posts = settings.get_int(SECTION_VIEW, 'MaxLandingPosts')
|
|
|
params[PARAM_LATEST_POSTS] = Post.objects.filter(pub_time__gt=today)\
|
|
|
.order_by('-pub_time')[:max_landing_posts]
|
|
|
|
|
|
return render(request, TEMPLATE, params)
|
|
|
|
|
|
|