def render(self, context): # Get the page number to use if it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # The request object is used to retrieve the current page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) if self.var_name is None: return utils.text(page_number) context[self.var_name] = page_number return ''
def render(self, context): # Get the page number to use if it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # The request object is used to retrieve the current page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) if self.var_name is None: return utils.text(page_number) context[self.var_name] = page_number return ''
def render(self, context): # Handle page number when it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # Calculate the number of items to show on each page. if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # Calculate the number of items to show in the first page. if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # Retrieve the override path if used. if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # Retrieve the queryset and create the paginator object. objects = self.objects.resolve(context) paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # Normalize the default page number if a negative one is provided. if default_number < 0: default_number = utils.normalize_page_number( default_number, paginator.page_range) # The current request is used to get the requested page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) # Get the page. try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) if settings.PAGE_OUT_OF_RANGE_404: raise Http404('Page out of range') # CUSTOMIZATION: Add last object on previous page if page_number > 1: try: paginator_prev = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) previous_page = paginator_prev.page(page_number - 1) last_object = previous_page.object_list[-1] except EmptyPage: last_object = None else: last_object = None # Populate the context with required data. data = { 'default_number': default_number, 'override_path': override_path, 'page': page, 'querystring_key': querystring_key, 'last_object': last_object } context.update({'endless': data, self.var_name: page.object_list}) return ''
def post_list(request, template='blog/post_list.html', extra_context=None): start = time.time() time_array = [] time_array.append(strftime("%Y-%m-%d %H:%M:%S", gmtime())) time_array.append(round(time.time() - start, 2)) # Remove session key on 1 page after reload if not request.is_ajax() and request.session.get("post_list"): # If current user has loaded the main page at least once if request.session.get("page_num"): page = request.session['page_num'] - 1 last_shown_posts = request.session['post_list'][0:page * 12 + 12] decrease_shown_posts_rec(request, last_shown_posts) del request.session['post_list'] time_array.append(round(time.time() - start, 2)) # Add session key for pagination without reloading new content if not request.session.get("post_list"): # Recommender system 1: content-based if not logged_with_vk(request) or not open_vk_profile(request): # print("not logged with vk: form_feed_content_recs") # request.session['post_list'] = form_feed_content_recs(request) request.session['post_list'] = form_content_recs_analog(request) # Recommender system 2: topic-profile-based else: # print("logged with vk: topic_profile_recommendations") user_vector = user_topic_profile(request) # Forming rating of best recommended post for current user request.session['post_list'] = topic_profile_recommendations( request, user_vector) time_array.append(round(time.time() - start, 2)) # Подгрузка сведений об опросах поста # Connecting to database con = connect_to_database_ro() cursor = con.cursor() # Check if current user voted in current poll user_key = get_user_key(request) user_polls = pd.read_sql_query( "SELECT * FROM blog_poll_values " "where user_id=\"" + str(user_key) + "\"", con) cursor.close() con.close() time_array.append(round(time.time() - start, 2)) # for post in request.session['post_list']: # poll_id_array = [] # for quote in post.quotes.all(): # for poll in quote.polls.all(): # poll_id_array.append(poll.id) # user_poll_num = user_polls.loc[user_polls.post_id == post.pk]['blog_poll_id'].tolist() # setattr(post, 'total_polls', len(poll_id_array)) # setattr(post, 'user_polls', len(set(user_poll_num) & set(poll_id_array))) time_array.append(round(time.time() - start, 2)) # Get objects of posts from session posts = request.session.get('post_list') # Form a list of recommended posts context = { 'entry_list': posts, } if extra_context is not None: context.update(extra_context) # Remove session on last page page = utils.get_page_number_from_request(request) request.session['page_num'] = page # Writing to database shown posts for user if request.session.get("page_num"): page = request.session['page_num'] - 1 # write_shown_posts_analytics(request, request.session['post_list']) time_array.append(round(time.time() - start, 2)) with open("out.csv", "a", newline="") as f: writer = csv.writer(f) writer.writerow(time_array) return render(request, template, context)
def render(self, context): # Handle page number when it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # Calculate the number of items to show on each page. if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # Calculate the number of items to show in the first page. if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # Retrieve the override path if used. if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # Retrieve the queryset and create the paginator object. objects = self.objects.resolve(context) paginator = self.paginator( objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # Normalize the default page number if a negative one is provided. if default_number < 0: default_number = utils.normalize_page_number( default_number, paginator.page_range) # The current request is used to get the requested page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) # Get the page. try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) if settings.PAGE_OUT_OF_RANGE_404: raise Http404('Page out of range') # Populate the context with required data. data = { 'default_number': default_number, 'override_path': override_path, 'page': page, 'querystring_key': querystring_key, } context.update({'endless': data, self.var_name: page.object_list}) return ''
def test_custom_querystring_key(self): # Ensure the page returned correctly reflects the ``querystring_key``. request = self.factory.get('?mypage=4'.format(PAGE_LABEL)) page_number = utils.get_page_number_from_request( request, querystring_key='mypage') self.assertEqual(4, page_number)
def test_post_data(self): # The page number can also be present in POST data. request = self.factory.post('/', {PAGE_LABEL: 5}) self.assertEqual(5, utils.get_page_number_from_request(request))
def test_default(self): # Ensure the default page number is returned if page info cannot be # retrieved from the querystring. request = self.factory.get('/') page_number = utils.get_page_number_from_request(request, default=3) self.assertEqual(3, page_number)
def test_default_querystring_key(self): # Ensure the default page label is used if ``querystring_key`` # is not provided. request = self.factory.get('?{0}=2'.format(PAGE_LABEL)) self.assertEqual(2, utils.get_page_number_from_request(request))
def test_no_querystring_key(self): # Ensure the first page is returned if page info cannot be # retrieved from the querystring. request = self.factory.get('/') self.assertEqual(1, utils.get_page_number_from_request(request))
def index(request): questions = Question.objects.filter( blockedOrNot=False).order_by('-created_at') user = request.user try: exp_question = Question.objects.get( pk=request.GET['responses_requested']) cur_page = request.GET['page'] expanded_question_list = [exp_question] exp_answers = expanded_question_list[0].answers.order_by( 'helpfulCount', '-created_at')[:5] top_answer = exp_answers[0] except (KeyError, Question.DoesNotExist): expanded_question_list = [] exp_answers = [] cur_page = utils.get_page_number_from_request(request) top_answer = '' try: res_question = Question.objects.get(pk=request.GET['respond_to_q']) cur_page = request.GET['page'] response_question_list = [res_question] except (KeyError, Question.DoesNotExist): response_question_list = [] try: close_q = Question.objects.get(pk=request.GET['close_requested']) expanded_question_list = [] cur_page = request.GET['page'] exp_answers = [] except: pass # questions the user flagged try: flagged_q = Question.objects.get(pk=request.POST['flag_q']) user = request.user flagged_q.inappropriateCount += 1 flagged_q.inappropriateId.add(user) flagged_q.save() user.flagged_questions.add(flagged_q) user.save() cur_page = request.GET['page'] except: pass # unflag question try: unflagged_q = Question.objects.get(pk=request.POST['unflag_q']) user = request.user unflagged_q.inappropriateCount -= 1 unflagged_q.inappropriateId.remove(user) unflagged_q.save() user.flagged_questions.remove(unflagged_q) user.save() cur_page = request.GET['page'] except: pass # if user logged in, don't let them reflag question try: user = request.user flagged_question_list = user.flagged_questions.all() except: flagged_question_list = [] # mark response as helpful try: helpful_answer = Answer.objects.get(pk=request.GET['helpful']) user = request.user helpful_answer.helpfulCount += 1 helpful_answer.helpfulId.add(user) helpful_answer.save() user.helpful_responses.add(helpful_answer) user.save() except: pass #no double flagging try: user = request.user helpful_responses_list = user.helpful_responses.all() except: helpful_responses_list = [] # un mark response as helpful try: unhelpful_answer = Answer.objects.get(pk=request.GET['unhelpful']) user = request.user unhelpful_answer.helpfulCount -= 1 unhelpful_answer.helpfulId.remove(user) unhelpful_answer.save() user.helpful_responses.remove(unhelpful_answer) user.save() except: pass #response flagging try: inapp_answer = Answer.objects.get(pk=request.GET['inapp']) user = request.user inapp_answer.inappropriateCount += 1 inapp_answer.inappropriateId.add(user) inapp_answer.save() inapp_answer.user.profile.inappropriateCount += 1 inapp_answer.user.profile.save() inapp_answer.user.save() user.inappropriate_responses.add(inapp_answer) user.save() except: pass try: user = request.user inapp_responses_list = user.inappropriate_responses.all() except: inapp_responses_list = [] # unflag as inappropriate try: un_inapp_answer = Answer.objects.get(pk=request.GET['uninapp']) user = request.user un_inapp_answer.inappropriateCount -= 1 un_inapp_answer.inappropriateId.remove(user) un_inapp_answer.save() un_inapp_answer.user.profile.inappropriateCount -= 1 un_inapp_answer.user.profile.save() un_inapp_answer.user.save() user.inappropriate_responses.remove(un_inapp_answer) user.save() except: pass template = loader.get_template('blog/index.html') context = { 'questions': questions, 'expanded_question_list': expanded_question_list, 'response_question_list': response_question_list, 'user': request.user, 'flagged_question_list': flagged_question_list, 'expanded_answers': exp_answers, 'cur_page': cur_page, 'helpful_responses_list': helpful_responses_list, 'inapp_responses_list': inapp_responses_list, } return HttpResponse(template.render(context, request))
def render(self, context): # Handle page number when it is not specified in querystring. if self.page_number_variable is None: default_number = self.page_number else: default_number = int(self.page_number_variable.resolve(context)) # Calculate the number of items to show on each page. if self.per_page_variable is None: per_page = self.per_page else: per_page = int(self.per_page_variable.resolve(context)) # Calculate the number of items to show in the first page. if self.first_page_variable is None: first_page = self.first_page or per_page else: first_page = int(self.first_page_variable.resolve(context)) # User can override the querystring key to use in the template. # The default value is defined in the settings file. if self.querystring_key_variable is None: querystring_key = self.querystring_key else: querystring_key = self.querystring_key_variable.resolve(context) # Retrieve the override path if used. if self.override_path_variable is None: override_path = self.override_path else: override_path = self.override_path_variable.resolve(context) # Retrieve the queryset and create the paginator object. objects = self.objects.resolve(context) # objects = objects.order_by('-created_at') paginator = self.paginator(objects, per_page, first_page=first_page, orphans=settings.ORPHANS) # Normalize the default page number if a negative one is provided. if default_number < 0: default_number = utils.normalize_page_number( default_number, paginator.page_range) # The current request is used to get the requested page number. page_number = utils.get_page_number_from_request( context['request'], querystring_key, default=default_number) # Get the page. try: page = paginator.page(page_number) except EmptyPage: page = paginator.page(1) # Populate the context with required data. data = { 'default_number': default_number, 'override_path': override_path, 'page': page, 'querystring_key': querystring_key, } context.update({'endless': data, self.var_name: page.object_list}) return ''