"TemplateSyntaxError: Invalid filter:"; benutzerdefinierte django template-filter basierend auf django-docs kaputt, aber template-tags arbeiten

Habe ich eine template-filter basiert auf dem django-docs an https://docs.djangoproject.com/en/1.8/howto/custom-template-tags/. Für das Leben von mir ich kann nicht sehen, einen Unterschied in meinem Gebrauch und die ihrigen, und bin langsam verrückt. Ich habe einen tag bekam ich in einem forum als solche:

myproject/index/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)

Diese, add_get auf Zeilen 8-9, arbeiten, in der Erwägung, dass shorten_title auf der Linie 4 nicht funktioniert:

myproject/templates/index/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 %}

Hier ist der Bösewicht:

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)

Er war so unhöflich ich doppelt registriert ihn, nur um zu sehen, was passiert (er arbeitet nicht registriert, einmal als Dekorateur oder danach, und nicht die Arbeit doppelt angemeldet).

{{ article.title }} funktioniert, aber {{ article.title|shorten_title }} bricht die Seite mit:

django.template.base.TemplateSyntaxError
TemplateSyntaxError: Invalid filter: 'shorten_title'

'Index' ist definitiv registriert und arbeiten, und die Seite funktioniert, wenn ich den filter löschen aus, dass Artikel.title-tag.

Regel, wenn ich einen hartnäckigen Fehler, ich verpasste etwas klein, aber die docs Wort für Wort hat mich verblüfft (ich habe geschrieben, mehrere Filter arbeiten vor). Ist dieser filter schlecht, oder ist es vielleicht etwas anderes in meiner Seite, die das Problem verursacht? Dank

  • Also, wo ist das shorten_title code? Welche Datei? Sind Sie Import dieser Datei in die Vorlage? (Beachten Sie auch, sollten Sie nicht verwenden die beiden die Raumausstatter und die direkte register.filter(..) Anruf: wählen Sie eine oder das andere.)
  • Titel kürzen war extras.py. Ich habe buchstäblich Ausschneiden und einfügen den code in eine neue Datei ohne tags (nur diesen einen filter...), und jetzt funktioniert es. hätte es sich um eine dieser seltsamen pyc Dinge, wo du musst alle löschen Ihre pyc, oder vielleicht auch template tags und Filter sollte nicht in der gleichen Datei? nach dem django Beispiele zweimal, einen Tag arbeitet und eines Tages wird es nicht, ist unverständlich
InformationsquelleAutor codyc4321 | 2015-08-15
Schreibe einen Kommentar