From 7b144b15a6a96853ea8ec90c7bfd02a7e529f814 Mon Sep 17 00:00:00 2001 From: Zambom Date: Tue, 11 Oct 2016 21:19:20 -0300 Subject: [PATCH] Adding post pagination (Load more posts button) [Issue: #74] --- forum/static/js/forum.js | 36 +++++++++++++++++++++++++++++++++++- forum/templates/forum/forum_view.html | 5 +++++ forum/templates/post/post_list.html | 6 ++++++ forum/templatetags/list_post.py | 22 +++++++++++++++++++++- forum/urls.py | 1 + forum/views.py | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 100 insertions(+), 2 deletions(-) diff --git a/forum/static/js/forum.js b/forum/static/js/forum.js index 8ea7658..ee794a6 100644 --- a/forum/static/js/forum.js +++ b/forum/static/js/forum.js @@ -220,6 +220,39 @@ function delete_post(url, post) { /* * +* Function to load more posts +* +*/ +function load_more_posts(pageNum, numberPages, url) { + // Remove button from the template + $("#load_more_posts").remove(); + + // Check if page is equal to the number of pages + if (pageNum == numberPages) { + return false + } + + pageNum += 1; + + // Show loader + $("#loading_posts").show(); + + // Configure the url we're about to hit + setTimeout(function (){ + $.ajax({ + url: url, + data: {'page': pageNum}, + success: function(data) { + $("#loading_posts").hide(); + + $("#posts_list").append(data); + } + }); + }, 1000) +}; + +/* +* * Function to load answer post form and set the submit function * */ @@ -321,4 +354,5 @@ function delete_answer(url, answer, message) { } }); }); -} \ No newline at end of file +} + diff --git a/forum/templates/forum/forum_view.html b/forum/templates/forum/forum_view.html index 89e104e..9ca54b3 100644 --- a/forum/templates/forum/forum_view.html +++ b/forum/templates/forum/forum_view.html @@ -101,6 +101,11 @@
{% list_posts request forum %}
+ diff --git a/forum/templates/post/post_list.html b/forum/templates/post/post_list.html index ad13ac8..0934969 100644 --- a/forum/templates/post/post_list.html +++ b/forum/templates/post/post_list.html @@ -42,4 +42,10 @@ {% endfor %} +{% endif %} + +{% if not page_obj.number == paginator.num_pages %} + + {% trans 'Load more posts' %} + {% endif %} \ No newline at end of file diff --git a/forum/templatetags/list_post.py b/forum/templatetags/list_post.py index 819767c..06fe36d 100644 --- a/forum/templatetags/list_post.py +++ b/forum/templatetags/list_post.py @@ -1,5 +1,7 @@ from django import template +from django.core.paginator import Paginator, EmptyPage + from forum.models import Post register = template.Library() @@ -14,6 +16,24 @@ def list_posts(request, forum): 'request': request, } - context['posts'] = Post.objects.filter(forum = forum).order_by('post_date') + posts = Post.objects.filter(forum = forum).order_by('post_date') + + paginator = Paginator(posts, 1) + + try: + page_number = int(request.GET.get('page', 1)) + except ValueError: + raise Http404 + + try: + page_obj = paginator.page(page_number) + except EmptyPage: + raise Http404 + + context['paginator'] = paginator + context['page_obj'] = page_obj + + context['posts'] = page_obj.object_list + context['forum'] = forum return context \ No newline at end of file diff --git a/forum/urls.py b/forum/urls.py index 0d29169..b3fa00f 100644 --- a/forum/urls.py +++ b/forum/urls.py @@ -11,6 +11,7 @@ urlpatterns = [ url(r'^render_forum/([\w_-]+)/$', views.render_forum, name='render_forum'), url(r'^render_edit_forum/([\w_-]+)/$', views.render_edit_forum, name='render_edit_forum'), url(r'^forum_deleted/$', views.forum_deleted, name='deleted_forum'), + url(r'^load_posts/(?P[\w_-]+)/$', views.load_posts, name='load_posts'), url(r'^create_post/$', views.CreatePostView.as_view(), name='create_post'), url(r'^update_post/(?P[\w_-]+)/$', views.PostUpdateView.as_view(), name='update_post'), url(r'^delete_post/(?P[\w_-]+)/$', views.PostDeleteView.as_view(), name='delete_post'), diff --git a/forum/views.py b/forum/views.py index a38dd42..ba3c9ad 100644 --- a/forum/views.py +++ b/forum/views.py @@ -4,6 +4,8 @@ from django.core.urlresolvers import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ from django.views import generic from django.contrib.auth.mixins import LoginRequiredMixin +from django.core.paginator import Paginator, EmptyPage +from django.http import Http404 from .models import Forum, Post, PostAnswer from courses.models import Topic @@ -110,6 +112,36 @@ class ForumDetailView(LoginRequiredMixin, generic.DetailView): """ Post Section """ +def load_posts(request, forum_id): + context = { + 'request': request, + } + + forum = get_object_or_404(Forum, id = forum_id) + + posts = Post.objects.filter(forum = forum).order_by('post_date') + + paginator = Paginator(posts, 1) + + try: + page_number = int(request.GET.get('page', 1)) + except ValueError: + raise Http404 + + try: + page_obj = paginator.page(page_number) + except EmptyPage: + raise Http404 + + print(page_number) + + context['paginator'] = paginator + context['page_obj'] = page_obj + + context['posts'] = page_obj.object_list + context['forum'] = forum + + return render(request, 'post/post_list.html', context) class CreatePostView(LoginRequiredMixin, generic.edit.CreateView): login_url = reverse_lazy("core:home") -- libgit2 0.21.2