Django: Неверный фильтр

У меня есть приложение для статьи и вы пытаетесь создать настраиваемый фильтр, у меня есть каталог с именем templatetags в приложении статьи и tag.py внутри этого каталога, вот структура каталогов.

-manage.py(f)
-settings.py(f)
-articles(d)
 - templatetags(d)
  - tags.py(f)

В шаблонах статьи имеют свой собственный каталог, все шаблоны статей простираются от шаблона base.html, вот структура шаблона.

-base.html(f)
-articles(d)
 -index.html(f)

Я загружаю теги в base.html {% load tags%} и использую настраиваемый фильтр в index.html и получил неверную ошибку фильтра.

tags.py

from django import template                                                                                                                                                        
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
@stringfilter
def space2Dash(s):
    return s.replace(' ', '_');

Я просто не могу понять, что я сделал неправильно.

изменить: Я изменил имя фильтра на abcfilter.py, и у меня есть приложение статьи, загруженное в мои settings.py статьи /index.html

 {% load abcfilter %}
 {{ "foo bar"|space2dash }}

ошибка:

Request Method: GET
Request URL:    http://localhost:8080/articles/
Django Version: 1.2.5
Exception Type: TemplateSyntaxError
Exception Value:    
Invalid filter: 'space2dash'
Exception Location: ***/lib/python2.7/django/template/__init__.py in find_filter, line 363
Python Executable:  /usr/local/bin/python
Python Version: 2.7.1
Server time:    Sun, 10 Apr 2011 07:55:54 -0500

Ответ 1

Сначала удалите точку с запятой после замены.

У вас есть файл с именем __init__.py (предположим, у него есть 2 символа подчеркивания до и после init, трудно форматировать в редакторе.) в каталоге templatetags?

Вот хорошая страница с большим количеством информации, если вы еще не посмотрели.

http://docs.djangoproject.com/en/dev/howto/custom-template-tags/

Ответ 2

Я почти схожу с этой проблемой, и ни один из вышеперечисленных ответов не помог.

Если у вас несколько приложений, убедитесь, что имена файлов, содержащие ваши собственные теги/фильтры, уникальны, предпочтительнее app_name_filters.py. В противном случае Django будет загружать только пользовательские фильтры из приложения, которое находит совпадение в первую очередь!

Ответ 3

Для справки я решил проблему, переместив

{% load ... %}

от базового шаблона до конкретного шаблона. См. Также этот пост fooobar.com/info/396605/...