나는 다음과 같다 게시물의 모델을 가지고 :제목을 다른 게시물의 링크로 대체하는 가장 좋은 방법은 무엇입니까?
class Post(models.Model):
slug = AutoSlugField(populate_from = 'title', unique = True)
title = models.CharField(max_length = 200)
content = models.TextField(blank = True)
is_published = models.BooleanField(default = False)
created_on = models.DateField(auto_now = True)
def get_absolute_url(self):
return reverse('post', args = [self.slug])
내가 템플릿에 게시물을 렌더링 할 때 내가이있는 경우 모든 예를 들어, 해당 게시물에 대한 링크 (와 게시물 제목의 언급 교체하고 싶습니다 게시물은 'foo'로 표시되고 다른 게시물의 콘텐츠는 'foo'로 표시되어 게시물에 대한 링크로 대체됩니다. 그 나는 다음과 같은 간단한 템플릿 태그를 작성한 들어
은 (django-classy-tags 사용) :
class LinkBack(Tag):
options = Options(
Argument('posts', required = True),
'for',
Argument('content', required = True)
)
def render_tag(self, context, posts, content):
output = content
for post in posts:
output = output.replace(post.title, '<a href="%s">%s</a>' % (post.get_absolute_url() , post.title))
return output
그러나 나는이 많은 게시물이있을 때 내 웹 사이트 속도를 느리게가는 것을 우려하고있다.
루프를 최적화 할 수있는 방법이 있습니까?
pre_save 신호에 연결할 수는 있지만 기존 게시물에만 연결되며 separation of concerns 원칙을 위반하고있는 것처럼 느껴집니다.
가장 좋은 방법은 무엇입니까?
편집 :
크론 작업에서이 작업을 수행해야합니까? 그렇게하면 성능 문제를 처리 할 필요가 없지만 데이터의 문제가 아니기 때문에 SOC를 여전히 위반하고 있습니다.
프로젝트에서이 문제로 인해 속도가 느려졌습니다. –
@Ignacio Vazquez-Abrams : 아직 개발 중이지만이를 확인하기 위해 많은 게시물을 입력했습니다. –
게시 페이지가로드 된 후에 Javascript로 처리하는 방법에 대해 생각할 수 있습니다. ajax 호출 (캐시 외부)을 사용하여 게시물 제목을 잡은 다음 필요에 따라 기존 페이지를 검색하고 교체하십시오. – Grant