我正在尝试构建一个博客应用程序,问题是当我在我的模板中使用标签'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 %}
答案 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
此补丁提供了一种替换截断文本的默认省略的方法。