diff --git a/boards/mdx_neboard.py b/boards/mdx_neboard.py --- a/boards/mdx_neboard.py +++ b/boards/mdx_neboard.py @@ -65,14 +65,8 @@ class ReflinkPattern(Pattern): ref_element = etree.Element('a') post = posts[0] - if not post.is_opening(): - link = reverse('thread', kwargs={ - 'post_id': post.thread_new.get_opening_post().id})\ - + '#' + post_id - else: - link = reverse('thread', kwargs={'post_id': post_id}) - ref_element.set('href', link) + ref_element.set('href', post.get_url()) ref_element.text = m.group(2) return ref_element diff --git a/boards/models/post.py b/boards/models/post.py --- a/boards/models/post.py +++ b/boards/models/post.py @@ -9,6 +9,7 @@ import hashlib from django.core.cache import cache from django.core.paginator import Paginator +from django.core.urlresolvers import reverse from django.db import models, transaction from django.http import Http404 @@ -23,6 +24,7 @@ MAX_TITLE_LENGTH = 50 APP_LABEL_BOARDS = 'boards' CACHE_KEY_PPD = 'ppd' +CACHE_KEY_POST_URL = 'post_url' POSTS_PER_DAY_RANGE = range(7) @@ -307,6 +309,26 @@ class Post(models.Model): thread.last_edit_time = edit_time thread.save() + def get_url(self): + """ + Get full url to this post + """ + + cache_key = CACHE_KEY_POST_URL + str(self.id) + link = cache.get(cache_key) + + if not link: + if not self.is_opening(): + link = reverse('thread', kwargs={ + 'post_id': self.thread_new.get_opening_post().id}) + '#' + str( + self.id) + else: + link = reverse('thread', kwargs={'post_id': self.id}) + + cache.set(cache_key, link) + + return link + class Thread(models.Model): diff --git a/boards/templatetags/board.py b/boards/templatetags/board.py --- a/boards/templatetags/board.py +++ b/boards/templatetags/board.py @@ -1,4 +1,3 @@ -from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404 from boards.models import Post from boards.views import thread, api @@ -24,14 +23,7 @@ def post_url(*args, **kwargs): post = get_object_or_404(Post, id=post_id) - if not post.is_opening(): - link = reverse('thread', kwargs={ - 'post_id': post.thread_new.get_opening_post().id}) + '#' + str( - post_id) - else: - link = reverse('thread', kwargs={'post_id': post_id}) - - return link + return post.get_url() @register.simple_tag(name='image_actions')