2

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'

疑い

このカスタムフィルターが機能しない理由がわかりません。タイトルなどの他のすべての定義済みフィルターは機能していますが、このカスタムフィルターはまったく機能していません。

4

1 に答える 1

6

ドキュメントによると:

たとえば、カスタムタグ/フィルターが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%}を入力して、templatetagを有効にします。

于 2012-08-23T17:17:42.420 に答える