def thread(request, board_id, thread_id): profile = get_object_or_404(UserProfile, user=request.user) thread = get_object_or_404(Thread, pk=thread_id) post_form = PostForm() posts = thread.post_set.all().order_by('date_posted') paginator = Paginator(posts, 20) page = request.GET.get('page') try: posts = paginator.page(page) except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) #user submits a post if request.method == 'POST': if 'addpost' in request.POST: post_form = PostForm(request.POST) if post_form.is_valid(): post = Post(user=profile, thread=thread, message_markdown=request.POST['message_markdown']) post.save() return HttpResponseRedirect(REDIRECT_THREAD % (board_id, thread_id)) elif 'gotopage' in request.POST: page_number = request.POST['pagenumber'] return HttpResponseRedirect(REDIRECT_THREAD_PAGE % (board_id, thread_id, page_number)) context = { 'thread': thread, 'posts': posts, 'post_form': post_form, 'profile': profile, } return render(request, 'bulletinboard/threadIndex.html', context)
def board(request, board_id): profile = get_object_or_404(UserProfile, user=request.user) board = get_object_or_404(Board, pk=board_id) thread_form = ThreadForm() post_form = PostForm() if request.method == 'POST': #user clicks the 'Add Thread' button if 'addthreadpost' in request.POST: thread_form = ThreadForm(request.POST) post_form = PostForm(request.POST) if thread_form.is_valid() and post_form.is_valid(): thread = Thread(name=request.POST['name'], user=profile, board=board) thread.save() post = Post(user=profile, thread=thread, message_markdown=request.POST['message_markdown']) post.save() return HttpResponseRedirect(REDIRECT_BOARD % board_id) elif 'gotopage' in request.POST: page_number = request.POST['pagenumber'] return HttpResponseRedirect(REDIRECT_BOARD_PAGE % (board_id, page_number)) #sort threads according to their most recent post threads = Thread.objects.filter(board=board).annotate(latest_post=Max('post__date_posted')).order_by('thread_type', 'latest_post') posts = [] for thread in threads: p = Post.objects.get(Q(thread=thread), Q(date_posted=thread.latest_post)) posts.append(p) paginator = Paginator(threads, 20) page = request.GET.get('page') try: threads = paginator.page(page) except PageNotAnInteger: threads = paginator.page(1) except EmptyPage: threads = paginator.page(paginator.num_pages) context = { 'board': board, 'thread_form': thread_form, 'post_form': post_form, 'threads': threads, 'posts': posts, 'profile': profile, } return render(request, 'bulletinboard/boardIndex.html', context)