Reputation: 4874
# -*- 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'
This tags from file work well, but the filter not. But I don't know why...
Upvotes: 4
Views: 14531
Reputation: 4497
For create your custom filter in django follow these steps
1). Create a template_tags folder in your app.
2). Add/Copy a __init__.py
file in this folder for ensure that this is a python folder.
3). Add your_custom_filter_name.py file look like:
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). To load this filter add this at top
{% load your_custom_filter_name %}
in html template .
.
5). Restart your server and enjoy :)
And for more info https://docs.djangoproject.com/en/1.7/howto/custom-template-tags/ follow this link
Upvotes: 9
Reputation: 411192
1. Did you put the file with the filters inside a templatetags
module in your app? I.e., you should have a structure like:
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. Did you include the tags? You need something like
{% load apptags %}
in your template.
Upvotes: 26