How to find that the content is truncated?

后端 未结 4 1213
误落风尘
误落风尘 2021-01-02 05:05

I\'m trying to build a blog app and the problem is when I use tag \'truncatewords_html\' in my template to truncate posts longer than specified number of words, I need to li

相关标签:
4条回答
  • 2021-01-02 05:15

    Check out http://code.djangoproject.com/ticket/6799

    This patch provides a method to replace the default elipses for truncated text.

    0 讨论(0)
  • 2021-01-02 05:22

    You could write a custom template tag (see django docs), or manually check in the template, whether the content you want to display exceeds the given length via length builtin filter.

    0 讨论(0)
  • 2021-01-02 05:29

    It comes down to personal preference, but for my taste you're doing way too much work in the template. I would create a method on the Post model, read_more_needed() perhaps, which returns True or False depending on the length of the text. eg:

    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)
    

    Then your template would read:

    {% if post.read_more_needed %}
      {{ post.body|truncatewords_html:30|safe }}<a href="{{ post.url}}">read more</a>
    {% else %}
      {{ post.body|safe }}
    {% endif %}
    
    0 讨论(0)
  • 2021-01-02 05:35

    This is pretty convoluted but django has some weird corners. Basically I figure if the string length is the same if you truncate at x and x+1 words then the string has not been truncated...

    {% ifnotequal post.body|truncatewords_html:30|length post.body|truncatewords_html:31|length %}
       <a href="#">read more...</a>
    {% endifnotequal %}
    
    0 讨论(0)
提交回复
热议问题