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) + '...'
{% 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'
我无法理解为什么此自定义过滤器无法正常工作。虽然所有其他预定义过滤器(如标题)都有效,但此自定义过滤器根本不起作用。
答案 0 :(得分:4)
例如,如果您的自定义标记/过滤器位于名为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%}以启用模板标签。