2009-11-26 3 views
7

블로그 앱을 만들려고하는데 'truncatewords_html'태그를 템플릿에 사용하여 지정된 단어 수보다 많은 글자를 자르면 링크가있어 'read more'와 같은 제목으로 게시물을 완성해야합니다. .. '절사 후. 그래서 나는 그 게시물이 잘 리거나 없어 졌음을 알아야한다.콘텐츠가 잘린 것을 찾는 방법은 무엇입니까?

피씨 :이 문제를 해결할 파이썬 방법입니까?

{% ifequal post.body|length post.body|truncatewords_html:max_words|length %} 
    {{ post.body|safe }} 
{% else %} 
    {{ post.body|truncatewords_html:max_words|safe }}<a href="{{ post.url}}">read more</a> 
{% endifequal %} 
표시 할 내용이 length 내장 필터를 통해 주어진 길이를 초과하는지 여부를 당신은 템플릿에 확인 수동 ( django docs 참조) 사용자 정의 템플릿 태그를 작성하거나 할 수

답변

4

이것은 꽤 복잡하지만 django는 이상한 모서리를 가지고 있습니다. 기본적으로 나는

{% ifnotequal post.body|truncatewords_html:30|length post.body|truncatewords_html:31|length %} 
    <a href="#">read more...</a> 
{% endifnotequal %} 
2

.

+1

하나를 디스플레이 길이를 초과하는지 여부를 확인하는 간단한 방법에 대해. 간단하고 잘 작동합니다. –

0

체크 아웃 http://code.djangoproject.com/ticket/6799

이 패치하는 방법을 제공합니다 ... 당신은 X에서 절단 및 X + 1 개 단어 다음 문자열이 절단되지 않은 경우 문자열의 길이가 동일한 경우 그림 절단 된 텍스트의 기본 엣지를 바꿉니다.

1

개인적인 취향이지만 내 취향에 따라 템플릿에서 너무 많은 작업을하고 있습니다. Post 모델에 read_more_needed()이라는 메소드를 만들면 텍스트의 길이에 따라 True 또는 False를 반환합니다. 예 :

def read_more_needed(self): 
    from django.utils.text import truncate_html_words 
    return not truncate_html_words(self.body,30)==truncate_html_words(self.body,31) 

그런 다음 템플릿 읽을 것입니다 :

{% if post.read_more_needed %} 
    {{ post.body|truncatewords_html:30|safe }}<a href="{{ post.url}}">read more</a> 
{% else %} 
    {{ post.body|safe }} 
{% endif %} 
+0

"read_more_need()"를 모델에 추가하려면 모델에서 잘린 부분도 수행해야합니다. 잘라내기를 수행하는 동일한 코드는 내용이 잘 렸는지 판단해야합니다. – Bryce

관련 문제