自定义模板筛选不起作用

时间:2012-08-23 17:07:40

标签: python django django-templates django-template-filters

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 %}

错误

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

疑问

我无法理解为什么此自定义过滤器无法正常工作。虽然所有其他预定义过滤器(如标题)都有效,但此自定义过滤器根本不起作用。

1 个答案:

答案 0 :(得分:4)

根据the documentation

  

例如,如果您的自定义标记/过滤器位于名为poll_extras.py的文件中,那么您的应用布局可能如下所示:

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

您已在views.py中定义了templatefilter。它应该在那里:

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

首先,创建yourapp/templatetags/文件夹,yourapp/templatetags/__init__.py空文件。将您的模板标签定义放在该文件夹中的yourapp_tags.py中。


  

在您的模板中,您将使用以下内容:

{% load poll_extras %}

最后,在您的模板中,添加{%load yourapp_tags%}以启用模板标签。