¿Cómo hacer correctamente el filtro personalizado en el marco de django?

# -*- coding: utf-8 -*- from django import template register = template.Library() @register.inclusion_tag('menu/create_minimenu.html', takes_context = True) def minimenu(context): .... .... @register.inclusion_tag('menu/create_topmenu.html', takes_context = True) def topmenu(context): .... .... @register.filter(name = 'commatodot') def commatodot(value, arg): return str(value).replace(",", '.') commatodot.isSafe = True 

template.html

 ... initGeolocation2({{ place.longitude|commatodot }}, {{ place.latitude|commatodot }}, "MAIN"); ... 

Error:

 TemplateSyntaxError at /places/3/ Invalid filter: 'commatodot' Request Method: GET Request URL: http://localhost:8000/places/3/ Django Version: 1.2.4 Exception Type: TemplateSyntaxError Exception Value: Invalid filter: 'commatodot' 

Estas tags de archivo funcionan bien, pero el filtro no. Pero no sé por qué …

1. ¿Colocó el archivo con los filtros dentro de un módulo de tags de templatetags en su aplicación? Es decir, deberías tener una estructura como:

 project/ my_app/ templatetags/ __init__.py # Important! It makes templatetags a module. You can put your filters here, or in another file. apptags.py # Or just put them in __init__.py 

2. ¿Incluiste las tags? Necesitas algo como

 {% load apptags %} 

en su plantilla

Para crear su filtro personalizado en django siga estos pasos

1). Crea una carpeta de tags de plantilla en tu aplicación.

2). Agregue / copie un archivo __init__.py en esta carpeta para asegurarse de que esta sea una carpeta de python.

3). Agregue su archivo_custom_filter_name.py como:

from django import template register = template.Library()

@register.filter(name = 'get_class') '''A filter for get class name of object.''' def get_class(value): return value.__class__.__name__

4). Para cargar este filtro, agregue esto en la parte superior {% load your_custom_filter_name%} en la plantilla html.
.

5). Reinicie su servidor y disfrute 🙂

Y para obtener más información https://docs.djangoproject.com/en/1.7/howto/custom-template-tags/ siga este enlace