django:过滤器无效
Posted
技术标签:
【中文标题】django:过滤器无效【英文标题】:django: Invalid filter 【发布时间】:2011-08-02 01:26:33 【问题描述】:我有一个文章应用程序并尝试制作一个自定义过滤器,我在文章应用程序中有一个名为 templatetags 的目录,该目录中有一个 tags.py,这是目录结构。
-manage.py(f)
-settings.py(f)
-articles(d)
- templatetags(d)
- tags.py(f)
在模板上,文章有自己的目录,所有文章模板都是从一个base.html模板扩展而来,这里是模板结构。
-base.html(f)
-articles(d)
-index.html(f)
我在 base.html % load tags % 中加载标签,并在 index.html 中使用自定义过滤器并得到无效过滤器错误。
tags.py
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter
@stringfilter
def space2Dash(s):
return s.replace(' ', '_');
我就是想不通我做错了什么。
编辑:
我将过滤器名称更改为abcfilter.py
,并在我的settings.py
中加载了文章应用程序
articles/index.html
% load abcfilter %
"foo bar"|space2dash
错误:
Request Method: GET
Request URL: http://localhost:8080/articles/
Django Version: 1.2.5
Exception Type: TemplateSyntaxError
Exception Value:
Invalid filter: 'space2dash'
Exception Location: ***/lib/python2.7/django/template/__init__.py in find_filter, line 363
Python Executable: /usr/local/bin/python
Python Version: 2.7.1
Server time: Sun, 10 Apr 2011 07:55:54 -0500
【问题讨论】:
【参考方案1】:仅供参考,我通过移动解决了问题
% load ... %
从基本模板到具体模板。 另请参阅此帖子https://***.com/a/10427321/3198502
【讨论】:
为我工作。将它放在基本模板中似乎根本不起作用 我遇到了同样的问题。有谁知道为什么会这样?【参考方案2】:首先删除替换后的分号。
templatetags 目录下是否有一个名为__init__.py
的文件(假设在init 前后有2 个下划线,很难在编辑器中格式化。)?
如果您还没有看过,这里是一个包含大量信息的好页面。
http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
【讨论】:
感谢您的回答,删除符号后,错误仍然存在。(仅供参考,我在 templatetags 目录中有一个空的 init.py 并且我已阅读文档页面几次,但我不知道我做错了什么) 尝试将文件从标签重命名为其他名称。也许标签是一个保留字。您是否在设置文件中注册了文章应用程序?你能发布确切的错误和你用来调用标签的 HTML 吗? 我已将 tags.py 更改为 abcfilter.py 并检查上述模板中的错误和 html 不确定转移到 SO 时是否是拼写错误,但 "foo bar"|space2dash % 应该是 "foo bar"|space2dash 您的方法也称为 space2Dash 但是您正在引用 space2dash(全部小写)。 谢谢肯,我想我要从亚马逊订购一顶帽子并吃掉它(问题是我有一个 space2Dash,大写的 D :)【参考方案3】:我几乎被这个问题发疯了,以上答案都没有帮助。
如果您有多个应用程序,请确保包含您的自定义标签/过滤器的文件名是唯一的,最好是app_name_filters.py
。否则 Django 只会从它首先找到匹配的应用程序中加载自定义过滤器!
【讨论】:
谢谢你!你触发我检查它...我的部署例程不会删除服务器上的旧文件。所以它在本地工作,并在测试中,但不在服务器上。我迷路了。你救了我! 不知何故,即使这对我也不起作用(我只是在谈论本地环境)。 :( Django 有时会非常奇怪。【参考方案4】:为避免使用% load MODULE_NAME %
在每个模板中加载模块,您可以在settings.py
中将其添加为'builtin'
:
TEMPLATES = [
'OPTIONS':
...
,
'builtins': [
...
'APP_NAME.templatetags.MODULE_NAME',
]
,
,
]
【讨论】:
以上是关于django:过滤器无效的主要内容,如果未能解决你的问题,请参考以下文章
我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误
使用 templatetags 方法的 Django 自定义过滤器不起作用!异常值为:无效过滤器:'dict_'
尝试在 Django 中的表单上使用脆表单过滤器时收到“无效表单:脆”错误,但仅在一个 django 应用程序中而不是另一个?