Login

Truncate string after a given number of chars keeping whole words

Author:
rix
Posted:
December 23, 2008
Language:
Python
Version:
1.0
Tags:
template filter templatetag truncate templatetags words
Score:
5 (after 5 ratings)

Truncates a string after a given length, keeping the last word complete.

This filter is more precise than the default truncatewords filter.

Words length vary too much, 10 words may result in 40 or 70 characters, so cutting by character count makes more sense.

There is a blog post about this snippet (in Portuguese).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from django import template

register = template.Library()

@register.filter
def truncatesmart(value, limit=80):
    """
    Truncates a string after a given number of chars keeping whole words.
    
    Usage:
        {{ string|truncatesmart }}
        {{ string|truncatesmart:50 }}
    """
    
    try:
        limit = int(limit)
    # invalid literal for int()
    except ValueError:
        # Fail silently.
        return value
    
    # Make sure it's unicode
    value = unicode(value)
    
    # Return the string itself if length is smaller or equal to the limit
    if len(value) <= limit:
        return value
    
    # Cut the string
    value = value[:limit]
    
    # Break into words and remove the last
    words = value.split(' ')[:-1]
    
    # Join the words and return
    return ' '.join(words) + '...'

More like this

  1. Truncate filter by zalun 5 years, 11 months ago
  2. Truncate text to length up until the nearest space by phektus 4 years ago
  3. truncate by alfor 7 years, 12 months ago
  4. Word-boundary-aware string truncation template filter by josho 5 years, 10 months ago
  5. Truncate HTML without breaking tags by olau 5 years, 11 months ago

Comments

Please login first before commenting.