Как правильно сделать собственный фильтр в фреймворке Django? - PullRequest
3 голосов
/ 08 февраля 2011
 # -*- 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");
...

Ошибка:

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'

Эти теги из файла работают хорошо, но фильтр - нет. Но я не знаю почему ...

Ответы [ 2 ]

24 голосов
/ 09 февраля 2011

1.Вы поместили файл с фильтрами в модуль templatetags в своем приложении?Т.е. у вас должна быть такая структура:

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.Вы включили теги?Вам нужно что-то вроде

{% load apptags %}

в вашем шаблоне.

9 голосов
/ 24 марта 2015

Для создания своего пользовательского фильтра в django выполните следующие действия

1).Создайте папку template_tags в своем приложении.

2).Добавьте / скопируйте файл __init__.py в эту папку, чтобы убедиться, что это папка Python.

3).Добавить your_custom_filter_name.py файл выглядит следующим образом:

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).Чтобы загрузить этот фильтр, добавьте его сверху {% load your_custom_filter_name%} в HTML-шаблон.
.

5). Перезагрузите сервер и наслаждайтесь:)

И для подробнее https://docs.djangoproject.com/en/1.7/howto/custom-template-tags/ перейдите по этой ссылке

...