我有一个基于https://docs.djangoproject.com/en/1.8/howto/custom-template-tags/的django文档的模板过滤器。对于我的生活,我看不出我的用法和他们的用处有什么不同,而且慢慢变得疯狂。我在论坛上有一个工作标签:
的myproject /索引/ templatetags / add_get_parameter.py:
from django.template import Library, Node, resolve_variable
register = Library()
class AddGetParameter(Node):
def __init__(self, values):
self.values = values
def render(self, context):
req = resolve_variable('request', context)
params = req.GET.copy()
for key, value in self.values.items():
params[key] = value.resolve(context)
return '?%s' % params.urlencode()
@register.tag
def add_get(parser, token):
pairs = token.split_contents()[1:]
values = {}
for pair in pairs:
s = pair.split('=', 1)
values[s[0]] = parser.compile_filter(s[1])
return AddGetParameter(values)
这一行,第8-9行的add_get
有效,而第4行的shorten_title
无效:
的myproject /模板/索引/ silo.html:
{% load bootstrap add_get_parameter extras %}
...other stuff...
{% for article in articles %}
<div class="col-md-4 article-link">
<div class="panel panel-default hover">
<div class="panel-heading"><h4 class="url-link">{{ article.title|shorten_title }}</h4></div>
<div class="panel-body">
<p> <span class="url-text">{{ article.url }}</span></p>
<a href="{% url 'index:edit-article' article.id %}"><div class="article_button">Edit</div></a>
<a href="{% add_get archive=article.id %}"><div class="article_button"><p>Archive</p></div></a>
<a href="{% add_get delete=article.id %}"><div class="article_button">Delete</div></a>
<div style="margin-top:8px;">
{% for tag in article.tags.all %}
<p class="tag">{{ tag.name }}</p>
{% endfor %}
</div>
</div>
</div>
</div>
{% endfor %}
这里是villian:
from django.template import Library
register = Library()
@register.filter
def shorten_title(title):
length = len(title)
new = title
if length > 65:
new = title[0:65] + "..."
return new
register.filter('shorten_title', shorten_title)
他是如此粗鲁,我双重注册他,只是为了看看会发生什么(他作为装饰师或之后没有注册过工作,并且没有注册两次工作)。
{{ article.title }}
有效,但{{ article.title|shorten_title }}
打破了以下网页:
django.template.base.TemplateSyntaxError
TemplateSyntaxError: Invalid filter: 'shorten_title'
&#39;指数&#39;肯定是注册和工作,当我从该article.title标签删除过滤器时页面工作。
通常当我遇到一个顽固的错误时,我错过了一些小的东西,但是逐字逐句地跟着文档让我感到困惑(我之前写了几个工作过滤器)。这个过滤器是坏的,还是我的页面中可能还有其他东西导致问题?感谢