" TemplateSyntaxError:无效的过滤器:&#34 ;;自定义django模板过滤器基于django docs破解,但模板标签工作

时间:2015-08-15 18:11:21

标签: python django templates django-template-filters

我有一个基于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>&nbsp;<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标签删除过滤器时页面工作。

通常当我遇到一个顽固的错误时,我错过了一些小的东西,但是逐字逐句地跟着文档让我感到困惑(我之前写了几个工作过滤器)。这个过滤器是坏的,还是我的页面中可能还有其他东西导致问题?感谢

0 个答案:

没有答案