import os.path import time from django.contrib import messages from django.db.models import Max,Count from django.shortcuts import render,redirect,reverse from django.views.generic import View,ListView,DetailView from.forms import RegisterForm,LoginForm,CommentForm from.models import User, Movie, Movie_rating, Movie_hot BASE=os.path.dirname(os.path.abspath(__file__)) class IndexView(ListView): model=Movie template_name='movie/index.html' paginatee_by=15 context_objject_name='movies' ordering='imdb_id' page_kwarg='p' def get_queryset(self): return Movie.object.filter(imdb_id__lte=1000) def get_context_data(self,*,object_list=None,**kwargs): context=super(IndexView,self).get_context_data(*kwargs) paginator=context.get('paginator') page_obj=context.get('page_obj') pagination_data=self.get_pagination_data(paginator,page_obj) context.updata(pagination_data) return context def get_pagination_data(self,paginator,page_obj,around_count=2): current_page=page_obj.number if current_page<=around_count+2: left_pages=range(1,current_page) left_has_more=False else: left_pages=range(current_page-around_count,current_page) left_has_more=True if current_page>=paginator.num_pages-around_count-1: right_pages=range(current_page+1,paginator.num_pages+1) right_has_more=False else: right_pages=range(current_page+1,current_page+around_count+1) right_has_more=True return{ 'left_pages':left_pages, 'right_pages':right_pages, 'current_page':current_page, 'left_has__more':left_has_more, 'right_has__more':right_has_more } class PopularMovieView(ListView): model=Movie_hot template_name='movie/hot.html' paginate_by=15 context_object_name='movies' page_kwarg='p' def get_queryset(self): movies=Movie.objects.annotate(nums=Count('movie_rating__score')).order_by('-nums')[:100] for movie in movies: record=Movie_hot(movie=movie,rating_number=movie.nums) record.save() hot_movies=Movie_hot.objects.all().values("movie_id") movies=Movie.objects.filter(id__in=hot_movies).ammotate(nums=Max('movie_hot__num')).order_by('-nums') return movies def get_context_data(self,*,object_list=None,**kwargs): context=super(PopularMovieView,self).get_context_data(*kwargs) paginator=context.get('paginator') page_obj=context.get('page_obj') pagination_data=self.get_pagination_data(paginator,page_obj) context.updata(pagination_data) return context def get_pagination_data(self,paginator,page_obj,around_count=2): current_page=page_obj.number