def thread(request, thread_id, page=1): page = int(page) current_site = Site.objects.get_current() filters = {'thread': thread_id, 'visible': True} thread = cache.get('thread_%s' % thread_id) if not thread: thread = get_object_or_404(Thread, pk=thread_id) if not thread.visible and not request.user.has_perm('can_edit'): raise Http404 cache.set('thread_%d' % (thread.id), thread) category_list = cache.get('category_list_%d' % current_site.id) if not category_list: category_list = Category.on_site.all().order_by('name') cache.set('category_list_%d' % current_site.id, category_list) orig_post = cache.get('orig_post_%s' % thread_id) if not orig_post: orig_post = Post.objects.filter(**filters).order_by('post_date')[0] cache.set('orig_post_%s' % thread_id, orig_post) posts_total = cache.get('posts_total_%s' % thread_id) if not posts_total: posts_total = Post.objects.filter(**filters).order_by('post_date').count() cache.set('posts_total_%s' % thread_id, posts_total) request.session['threads'].update({int(thread_id): datetime.datetime.now()}) total_pages = int(ceil(int(posts_total)/float(POSTS_PER_PAGE))) if total_pages == 0: total_pages = 1 if page > total_pages and page > 1: raise Http404 pages_to_show = [] post_list = [] if posts_total > 0: limit_start = (page-1)*POSTS_PER_PAGE limit_end = page*POSTS_PER_PAGE i = (page-5) if i > 2: start_page = True if (page+6) < total_pages: end_page = True while i <= (page+5): if i > 0 and i <= total_pages: pages_to_show.append(i) i += 1 post_list = cache.get('posts_%s_%s' % (thread_id, page)) if not post_list: post_list = Post.objects.filter(**filters).order_by('post_date')[limit_start:limit_end] for post in post_list: post.html = wiki_to_html(post.body, FormatterEnv(), request.LANGUAGE_CODE) if post.author.id == request.user.id or request.user.has_perm('can_edit'): post.canedit = True; cache.set('posts_%s_%s' % (thread_id, page), post_list) extra_context = { 'thread': thread, 'post_list': post_list, 'category_list': category_list, 'orig_post': orig_post, 'pages_to_show': pages_to_show, 'page': page, 'total_pages': total_pages, 'OBJECT': {'app': 'forums', 'view': 'thread', 'id': thread.id}, } if request.user.has_perm('forums.can_edit'): extra_context.update({'moderator': True}) return render_template(request, 'forums/thread.html', extra_context)