Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to properly make custom filter in django framework?

 # -*- 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...

like image 472
kspacja Avatar asked Nov 27 '22 01:11

kspacja


2 Answers

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.

like image 115
mipadi Avatar answered Dec 10 '22 03:12

mipadi


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

like image 22
GrvTyagi Avatar answered Dec 10 '22 03:12

GrvTyagi