views.py
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) + '...'
html
{% block content %}
<div class="container-fluid">
<div class="container" id="content">
<div class="span3">
<div class="dashboard">
<div class="well smooth-edge2 shadow">
<div class="mini-info">
<div class="username">
<h2 class="text-center">{{rest.name|truncatesmart}}</h2>
{% endblock %}
error
TemplateSyntaxError at /rprofile/info
Invalid filter: 'truncatesmart'
doubt
I am not able to understand why this custom filter is not working. While all other predefined filters such as title are working, this custom filter is not working at all.
According to the documentation:
You have defined your templatefilter in views.py. It should be there:
First, create
yourapp/templatetags/folder, andyourapp/templatetags/__init__.pyempty file. Put your templatetag definition in yourapp_tags.py in that folder.Finally, in your template, put {% load yourapp_tags %} to enable the templatetag.