def render_board(request, board_name, current_page=1): """ Render board with lists of threads and last 5 posts for them. :param request: user's request :param board_name: name of board that we should render :param current_page: page that user requested :return: board page """ board = get_board(board_name) board.url = board.uri posts = get_posts(board) threads = get_threads(posts).order_by('-bump') pages = Paginator(threads, 10) threads = pages.page(int(current_page)) for thread in threads: thread.posts = posts.filter(thread=thread.id) posts_len = len(thread.posts) thread.omitted = posts_len - 5 if posts_len >= 5 else 0 thread.posts = thread.posts[thread.omitted:] if request.method == 'POST': json_response = 'json_response' in request.POST agreed_with_rules = 'rules' in request.POST form = PostForm(request.POST, request.FILES) if agreed_with_rules: if form.is_valid(): _ip = get_ip(request) new_post_id = form.process(board_name, _ip, None) if new_post_id: if json_response: respond = json.dumps({ 'id': new_post_id, 'noko': False, 'redirect': '/' + board_name }) answer = HttpResponse( respond, content_type="application/json" ) else: answer = HttpResponseRedirect( reverse('thread', args=[board_name, new_post_id]) ) return answer else: form = PostForm() context = { 'config': config, 'board': board, 'boards': get_boards_navlist(), 'threads': threads, 'pages': pages, 'hr': True, 'index': True, 'form': form } return render(request, 'posts/index.html', context)
def render_thread(request, board_name, thread_id): """ Render thread page with all thread's posts. :param request: user's request :param board_name: name of threads board :param thread_id: thread id :return: thread page """ board = get_board(board_name) boards = get_boards_navlist() board.url = board.uri post = Post.objects.filter(board=board).get(id=thread_id) post.posts = Post.objects.filter(board=board).filter(thread=post.id) if request.method == 'POST': if 'delete' in request.POST: for key in request.POST.keys(): if key.startswith('delete_'): post_id = key[7:] post_to_delete = Post.objects.get(board=board, id=post_id) if post_to_delete.password == request.POST['password']: post_to_delete.delete() return HttpResponseRedirect( reverse('thread', args=[ board_name, thread_id ])) if 'report' in request.POST: for key in request.POST.keys(): if key.startswith('delete_'): post_id = key[7:] post_to_report = Post.objects.get(board=board, id=post_id) print(post_to_report) report = Report( ip=get_ip(request), reason=request.POST['reason'], post=post_to_report ) report.save(force_insert=True) return HttpResponseRedirect( reverse('thread', args=[ board_name, thread_id ])) json_response = 'json_response' in request.POST agreed_with_rules = 'rules' in request.POST post_form = PostForm(request.POST, request.FILES) if agreed_with_rules: if post_form.is_valid(): _ip = get_ip(request) new_post_id = post_form.process(board_name, _ip, thread_id) if new_post_id: if json_response: respond = json.dumps({ 'id': new_post_id, 'noko': False, 'redirect': '/' + board_name }) answer = HttpResponse( respond, content_type="application/json" ) else: answer = HttpResponseRedirect( reverse('thread', args=[ board_name, thread_id ]) + '#{0}'.format(new_post_id) ) return answer else: post_form = PostForm() context = { 'config': config, 'board': board, 'boards': boards, 'threads': [post], 'hr': True, 'form': post_form, 'id': 1 } return render(request, 'posts/page.html', context)