Пользовательский фильтр шаблонов не работает

просмотры.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 %}

ошибка

TemplateSyntaxError at /rprofile/info
Invalid filter: 'truncatesmart'

сомневаться

Я не могу понять, почему этот пользовательский фильтр не работает. В то время как все другие предопределенные фильтры, такие как заголовок, работают, этот пользовательский фильтр не работает вообще.


person Abhimanyu    schedule 23.08.2012    source источник


Ответы (1)


Согласно документации:

Например, если ваши пользовательские теги/фильтры находятся в файле с именем poll_extras.py, макет вашего приложения может выглядеть следующим образом:

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

Вы определили свой шаблонный фильтр в views.py. Там должно быть:

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

Сначала создайте yourapp/templatetags/ папку и yourapp/templatetags/__init__.py пустой файл. Поместите определение тега шаблона в файл yourapp_tags.py в этой папке.


И в вашем шаблоне вы должны использовать следующее:

{% load poll_extras %}

Наконец, добавьте в свой шаблон {% load yourapp_tags %}, чтобы активировать тег шаблона.

person jpic    schedule 23.08.2012
comment
верно, так что это двойная ошибка. Я думаю, что мое обновление ответа должно охватывать все это. Спасибо за ваш отзыв ! - person jpic; 23.08.2012
comment
теперь он говорит, что TemplateSyntaxError в /rprofile/info 'beenthere_tags' не является допустимой библиотекой тегов: библиотека шаблонов beenthere.templatetags.beenthere_tags не имеет переменной с именем 'register' - person Abhimanyu; 23.08.2012
comment
Если нет переменной с именем register, то вы не скопировали это: from django import template; регистрация = шаблон.Библиотека() - person jpic; 23.08.2012