Question

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.

Was it helpful?

Solution

According to the documentation:

For example, if your custom tags/filters are in a file called poll_extras.py, your app layout might look like this:

polls/
    models.py
    templatetags/
        __init__.py
        poll_extras.py
    views.py

You have defined your templatefilter in views.py. It should be there:

yourapp/templatetags/__init__.py
yourapp/templatetags/yourapp_tags.py

First, create yourapp/templatetags/ folder, and yourapp/templatetags/__init__.py empty file. Put your templatetag definition in yourapp_tags.py in that folder.


And in your template you would use the following:

{% load poll_extras %}

Finally, in your template, put {% load yourapp_tags %} to enable the templatetag.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top