如何找到内容被截断?

时间:2009-11-26 09:41:12

标签: django truncate

我正在尝试构建一个博客应用程序,问题是当我在我的模板中使用标签'truncatewords_html'来截断超过指定数量的单词的帖子时,我需要通过某些标题链接到完成帖子,例如'了解更多......'截断后。所以我应该知道帖子被截断了。

P.S。:这是解决这个问题的pythonic方法吗?

{% 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 %}

4 个答案:

答案 0 :(得分:6)

这是非常令人费解的,但是django有一些奇怪的角落。基本上我想如果你在x和x + 1字处截断字符串长度是相同的那么字符串没有被截断...

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

答案 1 :(得分:2)

您可以编写自定义模板标记(请参阅django docs),或通过length内置过滤器手动检入模板,以确定要显示的内容是否超过给定长度。

答案 2 :(得分: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 %}

答案 3 :(得分:0)

查看http://code.djangoproject.com/ticket/6799

此补丁提供了一种替换截断文本的默认省略的方法。