def find_post(request, name): """Find all posts written by an user. Returns: HttpResponse """ u = get_object_or_404(User, username=name) posts = Post.objects.all().filter(author=u)\ .order_by('-pubdate') paginator = Paginator(posts, settings.POSTS_PER_PAGE) page = request.GET.get('page') try: shown_posts = paginator.page(page) page = int(page) except PageNotAnInteger: shown_posts = paginator.page(1) page = 1 except EmptyPage: shown_posts = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('forum/find_post.html', { 'posts': shown_posts, 'usr': u, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def find_topic(request, name): """Find all topics created by an user. Returns: HttpResponse """ u = get_object_or_404(User, username=name) topics = Topic.objects.all().filter(author=u)\ .order_by('-pubdate') # Paginator paginator = Paginator(topics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'forum/find_topic.html', { 'topics': shown_topics, 'usr': u, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def find_topic(request, name): """Find all topics created by an user. Returns: HttpResponse """ u = get_object_or_404(User, username=name) topics = Topic.objects.all().filter(author=u)\ .order_by('-pubdate') # Paginator paginator = Paginator(topics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('forum/find_topic.html', { 'topics': shown_topics, 'usr': u, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def followed_topics(request): """Displays all the topics followed by an user. Returns: HttpResponse """ followed_topics = Profile.objects.get(user=request.user)\ .get_followed_topics() # Paginator paginator = Paginator(followed_topics, settings.FOLLOWED_TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'forum/followed_topics.html', { 'followed_topics': shown_topics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def find_post(request, name): """Find all posts written by an user. Returns: HttpResponse """ u = get_object_or_404(User, username=name) posts = Post.objects.all().filter(author=u)\ .order_by('-pubdate') paginator = Paginator(posts, settings.POSTS_PER_PAGE) page = request.GET.get('page') try: shown_posts = paginator.page(page) page = int(page) except PageNotAnInteger: shown_posts = paginator.page(1) page = 1 except EmptyPage: shown_posts = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'forum/find_post.html', { 'posts': shown_posts, 'usr': u, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def index(request): """Display list of registered users. Returns: HttpResponse """ members = User.objects.order_by('-date_joined') paginator = Paginator(members, settings.MEMBERS_PER_PAGE) page = request.GET.get('page') try: shown_members = paginator.page(page) page = int(page) except PageNotAnInteger: shown_members = paginator.page(1) page = 1 except EmptyPage: shown_members = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'member/index.html', { 'members': shown_members, 'members_count': members.count(), 'pages': paginator_range(page, paginator.num_pages), 'nb': page, })
def index(request): """Display messages of the user. Returns: HttpResponse """ # Delete using checkboxes if request.method == 'POST': if 'delete' in request.POST: delete_selected_inbox_messages(request) privatetopics = PrivateTopic.objects.all()\ .filter(Q(participants__in=[request.user]) | Q(author=request.user)) \ .distinct() \ .order_by('-last_message__pubdate') # Paginator paginator = Paginator(privatetopics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_privatetopics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_privatetopics = paginator.page(1) page = 1 except EmptyPage: shown_privatetopics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('messages/index.html', { 'privatetopics': shown_privatetopics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def index(request): """Display list of registered users. Returns: HttpResponse """ members = User.objects.order_by('-date_joined') paginator = Paginator(members, settings.MEMBERS_PER_PAGE) page = request.GET.get('page') try: shown_members = paginator.page(page) page = int(page) except PageNotAnInteger: shown_members = paginator.page(1) page = 1 except EmptyPage: shown_members = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('member/index.html', { 'members': shown_members, 'members_count': members.count(), 'pages': paginator_range(page, paginator.num_pages), 'nb': page, })
def followed_topics(request): """Displays all the topics followed by an user. Returns: HttpResponse """ followed_topics = request.user.get_profile().get_followed_topics() # Paginator paginator = Paginator(followed_topics, settings.FOLLOWED_TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('forum/followed_topics.html', { 'followed_topics': shown_topics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def index(request): """Display list of registered users. Returns: HttpResponse """ members = User.objects.order_by("-date_joined") paginator = Paginator(members, settings.MEMBERS_PER_PAGE) page = request.GET.get("page") try: shown_members = paginator.page(page) page = int(page) except PageNotAnInteger: shown_members = paginator.page(1) page = 1 except EmptyPage: shown_members = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( "member/index.html", { "members": shown_members, "members_count": members.count(), "pages": paginator_range(page, paginator.num_pages), "nb": page, }, )
def by_category(request, name): """Display all tutorials belonging to a specific category. Returns: HttpResponse """ # Deduce category to display based on its name if name == 'tous': category = TutorialCategory(title=u'Tous les tutoriels', slug=u'tous') tutorials = Tutorial.objects \ .filter(is_beta=False, is_visible=True) \ .order_by('-pubdate') elif name == 'autres': category = TutorialCategory(title=u'Non classés', slug=u'autres') tutorials = Tutorial.objects \ .filter(is_beta=False, is_visible=True) \ .filter(category=None) \ .order_by('-pubdate') elif name == 'beta': # Only visible for members if not request.user.is_authenticated(): raise PermissionDenied category = TutorialCategory(title=u'Bêta', slug=u'beta') tutorials = Tutorial.objects \ .filter(is_beta=True) \ .order_by('-pubdate') else: category = get_object_or_404(TutorialCategory, slug=name) tutorials = Tutorial.objects \ .filter(category=category, is_beta=False, is_visible=True) \ .order_by('-pubdate') paginator = Paginator(tutorials, settings.TUTORIALS_PER_PAGE) try: page_nbr = int(request.GET['page']) except KeyError: page_nbr = 1 try: tutorials = paginator.page(page_nbr) except PageNotAnInteger: tutorials = paginator.page(1) except EmptyPage: raise Http404 categories = TutorialCategory.objects.all() return render_template('tutorial/by_category.html', { 'category': category, 'categories': categories, 'tutorials': tutorials, 'nb': page_nbr, 'pages': paginator_range(page_nbr, paginator.num_pages), })
def details(request, cat_slug, forum_slug): """Display the given forum and all its topics. Returns: HttpResponse """ forum = get_object_or_404(Forum, slug=forum_slug) sticky_topics = Topic.objects.all() \ .filter(forum__pk=forum.pk, is_sticky=True) \ .order_by('-last_message__pubdate') topics = Topic.objects.all() \ .filter(forum__pk=forum.pk, is_sticky=False) \ .order_by('-last_message__pubdate') # Paginator paginator = Paginator(topics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'forum/details.html', { 'forum': forum, 'sticky_topics': sticky_topics, 'topics': shown_topics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def details(request, cat_slug, forum_slug): """Display the given forum and all its topics. Returns: HttpResponse """ forum = get_object_or_404(Forum, slug=forum_slug) sticky_topics = Topic.objects.all() \ .filter(forum__pk=forum.pk, is_sticky=True) \ .order_by('-last_message__pubdate') topics = Topic.objects.all() \ .filter(forum__pk=forum.pk, is_sticky=False) \ .order_by('-last_message__pubdate') # Paginator paginator = Paginator(topics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_topics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_topics = paginator.page(1) page = 1 except EmptyPage: shown_topics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template('forum/details.html', { 'forum': forum, 'sticky_topics': sticky_topics, 'topics': shown_topics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def index(request): """Display messages of the user. Returns: HttpResponse """ # Delete using checkboxes if request.method == 'POST': if 'delete' in request.POST: delete_selected_inbox_messages(request) privatetopics = PrivateTopic.objects.all()\ .filter(Q(participants__in=[request.user]) | Q(author=request.user)) \ .distinct() \ .order_by('-last_message__pubdate') # Paginator paginator = Paginator(privatetopics, settings.TOPICS_PER_PAGE) page = request.GET.get('page') try: shown_privatetopics = paginator.page(page) page = int(page) except PageNotAnInteger: shown_privatetopics = paginator.page(1) page = 1 except EmptyPage: shown_privatetopics = paginator.page(paginator.num_pages) page = paginator.num_pages return render_template( 'messages/index.html', { 'privatetopics': shown_privatetopics, 'pages': paginator_range(page, paginator.num_pages), 'nb': page })
def test_big_end_limit(self): result = paginator_range(7, 10) self.assertEqual(result, [1, None, 6, 7, 8, 9, 10])
def test_big_end(self): result = paginator_range(10, 10) self.assertEqual(result, [1, None, 9, 10])
def test_big_middle(self): result = paginator_range(5, 10) self.assertEqual(result, [1, None, 4, 5, 6, None, 10])
def test_big_start_limit(self): result = paginator_range(3, 10) self.assertEqual(result, [1, 2, 3, 4, None, 10])
def test_big_start(self): result = paginator_range(1, 10) self.assertEqual(result, [1, 2, None, 10])
def test_small_limit(self): result = paginator_range(1, 4) self.assertEqual(result, [1, 2, 3, 4])
def test_small(self): result = paginator_range(2, 3) self.assertEqual(result, [1, 2, 3])
def test_one(self): result = paginator_range(1, 1) self.assertEqual(result, [1])
def test_out_of_range(self): self.assertRaises(ValueError, lambda: paginator_range(3, 2))
def topic(request, topic_pk, topic_slug): """Display a topic and its posts using a pager. Returns: HttpResponse """ # TODO: Clean that up g_topic = get_object_or_404(PrivateTopic, pk=topic_pk) # Check permissions if not is_participant(request.user, g_topic): raise PermissionDenied # Check link if not topic_slug == slugify(g_topic.title): return redirect(g_topic.get_absolute_url()) # Mark the topic as read if request.user.is_authenticated(): if never_privateread(g_topic): mark_read(g_topic) posts = PrivatePost.objects.all().filter(privatetopic__pk=g_topic.pk)\ .order_by('position_in_topic') last_post_pk = g_topic.last_message.pk # Handle pagination paginator = Paginator(posts, settings.POSTS_PER_PAGE) try: page_nbr = int(request.GET['page']) except KeyError: page_nbr = 1 try: posts = paginator.page(page_nbr) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: raise Http404 res = [] if page_nbr != 1: # Show the last post of the previous page last_page = paginator.page(page_nbr - 1).object_list last_post = (last_page)[len(last_page) - 1] res.append(last_post) for post in posts: res.append(post) members = [g_topic.author] + list(g_topic.participants.all()) return render_template('messages/topic.html', { 'topic': g_topic, 'posts': res, 'pages': paginator_range(page_nbr, paginator.num_pages), 'nb': page_nbr, 'last_post_pk': last_post_pk, 'members': members })
def topic(request, topic_pk, topic_slug): """Display a topic and its posts using a pager. Returns: HttpResponse """ # TODO: Clean that up g_topic = get_object_or_404(PrivateTopic, pk=topic_pk) # Check permissions if not is_participant(request.user, g_topic): raise PermissionDenied # Check link if not topic_slug == slugify(g_topic.title): return redirect(g_topic.get_absolute_url()) # Mark the topic as read if request.user.is_authenticated(): if never_privateread(g_topic): mark_read(g_topic) posts = PrivatePost.objects.all().filter(privatetopic__pk=g_topic.pk)\ .order_by('position_in_topic') last_post_pk = g_topic.last_message.pk # Handle pagination paginator = Paginator(posts, settings.POSTS_PER_PAGE) try: page_nbr = int(request.GET['page']) except KeyError: page_nbr = 1 try: posts = paginator.page(page_nbr) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: raise Http404 res = [] if page_nbr != 1: # Show the last post of the previous page last_page = paginator.page(page_nbr - 1).object_list last_post = (last_page)[len(last_page) - 1] res.append(last_post) for post in posts: res.append(post) members = [g_topic.author] + list(g_topic.participants.all()) return render_template( 'messages/topic.html', { 'topic': g_topic, 'posts': res, 'pages': paginator_range(page_nbr, paginator.num_pages), 'nb': page_nbr, 'last_post_pk': last_post_pk, 'members': members })
def topic(request, topic_pk, topic_slug): """Display a thread and its posts using a pager. Returns: HttpResponse """ # TODO: Clean that up g_topic = get_object_or_404(Topic, pk=topic_pk) # Check link if not topic_slug == slugify(g_topic.title): return redirect(g_topic.get_absolute_url()) # We mark the topic as read if request.user.is_authenticated() and never_read(g_topic): mark_read(g_topic) posts = Post.objects.all() \ .filter(topic__pk=g_topic.pk) \ .order_by('position_in_topic') last_post_pk = g_topic.last_message.pk # Handle pagination paginator = Paginator(posts, settings.POSTS_PER_PAGE) # The category list is needed to move threads categories = Category.objects.all() # We try to get page number try: page_nbr = request.GET['page'] except KeyError: page_nbr = 1 # We try to page content try: posts = paginator.page(page_nbr) page_nbr = int(page_nbr) except PageNotAnInteger: posts = paginator.page(1) page_nbr = 1 except EmptyPage: raise Http404 res = [] if page_nbr > 1: # Show the last post of the previous page last_page = paginator.page(page_nbr - 1).object_list last_post = (last_page)[len(last_page) - 1] res.append(last_post) for post in posts: res.append(post) return render_template( 'forum/topic.html', { 'topic': g_topic, 'posts': res, 'categories': categories, 'pages': paginator_range(page_nbr, paginator.num_pages), 'nb': page_nbr, 'last_post_pk': last_post_pk })
def topic(request, topic_pk, topic_slug): """Display a thread and its posts using a pager. Returns: HttpResponse """ # TODO: Clean that up g_topic = get_object_or_404(Topic, pk=topic_pk) # Check link if not topic_slug == slugify(g_topic.title): return redirect(g_topic.get_absolute_url()) # We mark the topic as read if request.user.is_authenticated() and never_read(g_topic): mark_read(g_topic) posts = Post.objects.all() \ .filter(topic__pk=g_topic.pk) \ .order_by('position_in_topic') last_post_pk = g_topic.last_message.pk # Handle pagination paginator = Paginator(posts, settings.POSTS_PER_PAGE) # The category list is needed to move threads categories = Category.objects.all() # We try to get page number try: page_nbr = request.GET['page'] except KeyError: page_nbr = 1 # We try to page content try: posts = paginator.page(page_nbr) page_nbr = int(page_nbr) except PageNotAnInteger: posts = paginator.page(1) page_nbr = 1 except EmptyPage: raise Http404 res = [] if page_nbr > 1: # Show the last post of the previous page last_page = paginator.page(page_nbr - 1).object_list last_post = (last_page)[len(last_page) - 1] res.append(last_post) for post in posts: res.append(post) return render_template('forum/topic.html', { 'topic': g_topic, 'posts': res, 'categories': categories, 'pages': paginator_range(page_nbr, paginator.num_pages), 'nb': page_nbr, 'last_post_pk': last_post_pk })