from datetime import datetime from datetime import timedelta from django.db.models import Count 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 from boards.models import Tag, Attachment, STATUS_ACTIVE from boards.views.base import BaseBoardView PARAM_SECTION_STR = 'section_str' PARAM_LATEST_THREADS = 'latest_threads' PARAM_IMAGES = 'images' TEMPLATE = 'boards/landing.html' RANDOM_IMAGE_COUNT = 3 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(required=True)) 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('View', 'MaxFavoriteThreads') if max_landing_threads > 0: ops = ops[:max_landing_threads] params[PARAM_LATEST_THREADS] = ops params[PARAM_IMAGES] = Attachment.objects.get_random_images( RANDOM_IMAGE_COUNT) return render(request, TEMPLATE, params)