template tag registered one not must library invalid django django-template-filters

tag - django: filtro inválido



is not a registered tag library. must be one of: (3)

Casi me estaba volviendo loco con este problema y ninguna de las respuestas anteriores me ayudó.

Si tiene varias aplicaciones, asegúrese de que los nombres de los archivos que contienen sus etiquetas / filtros personalizados sean únicos, preferiblemente app_name_filters.py . De lo contrario, Django solo cargará los filtros personalizados desde la aplicación que encuentre primero.

Conseguí una aplicación de artículo y tratando de hacer un filtro personalizado, tengo un directorio llamado templatetags en la aplicación de artículo, y un tags.py dentro de ese directorio, aquí está la estructura del directorio.

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

En las plantillas, los artículos tienen su propio directorio, todas las plantillas de artículos se extienden desde una plantilla base.html, aquí está la estructura de la plantilla.

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

Cargo las etiquetas en base.html {% load tags%} y uso el filtro personalizado en index.html y obtuve el error de filtro no válido.

tags.py

from django import template from django.template.defaultfilters import stringfilter register = template.Library() @register.filter @stringfilter def space2Dash(s): return s.replace('' '', ''_'');

Simplemente no puedo entender lo que hice mal.

edición: cambié el nombre del filtro a abcfilter.py y tengo la aplicación del artículo cargada en mi settings.py

articulos / index.html

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

el error:

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


Primero quitar el punto y coma después de su reemplazo.

¿Tiene un archivo llamado __init__.py (se supone que tiene 2 guiones bajos antes y después del inicio, es difícil de formatear en el editor) en el directorio templatetags?

Aquí hay una buena página con mucha información si aún no has mirado.

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


Solo para referencia, resolví el problema moviéndome

{% load ... %}

De la plantilla base a la plantilla concreta. Véase también esta publicación https://.com/a/10427321/3198502