Все сводится к личным предпочтениям, но, на мой вкус, вы слишком много работаете с шаблоном. Я бы создал метод для модели 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 %}