2

视图.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'

怀疑

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

4

1 回答 1

6

根据文档

例如,如果您的自定义标签/过滤器位于名为 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 %} 以启用模板标签。

于 2012-08-23T17:17:42.420 回答