# -*- 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'
来自文件的这个标签运行良好,但过滤器没有。但我不知道为什么......
答案 0 :(得分:24)
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 %}
在你的模板中。
答案 1 :(得分:9)
要在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/,请点击此链接