2013-04-04 118 views
4

我试图在我的Django应用程序中创建自定义模板过滤器。我已经在我的应用程序下创建创建一个templatetags文件夹,添加一个__init__.py文件,并与我的过滤器filters.py文件,像这样:Django无法找到我的自定义模板过滤器

import os 
from django import template 
from django.template.defaultfilters import stringfilter 

register = template.Library() 

@register.filter 
@stringfilter 
def filename(pathname): 
    """ Returns the file's name, without folder """ 
    return os.path.basename(pathname) 

当我尝试从模板访问过滤器,我得到的错误“无效的过滤器‘名’”

这个问题已经被问了很多,所以我已经检查以下内容:

  • __init__.py正确命名为
  • 与打开后壳我可以导入我的过滤器,像这样:import app.templatetags
  • 我也可以正常使用过滤器从Django的壳
  • 我已经重新启动Django开发服务器。
  • 我在调用template.library()时调用了一个断点 - 调试器并没有停在那里。

这里是模板(我已经删除其中的一部分,但在这个小版本错误仍然存​​在,以及)

<form enctype="multipart/form-data" action="{% url lab.views.new.artefact_drop_web tempfile_id=tempfile.id %}" method="post"> 
    {% csrf_token %} 
    <h3>File:</h3> 
    <p>{{ tempfile.file.name|filename }}</p> 
    <input type="submit" value="Add" /> 
</form> 
+0

你能发布你的模板吗? – 2013-04-04 08:40:57

+0

已发布。这当然是减少了模板的版本。 – zmbq 2013-04-04 08:48:29

+0

我的疑惑是在创建templatetag文件后手动重新启动django服务器。伟大的事情总结检查! – scum 2015-06-10 16:56:20

回答

10

您需要使用您的{% load name_of_file_tags_are_in %}模板中。

https://docs.djangoproject.com/en/1.5/howto/custom-template-tags/

+2

令人难以置信!出于某种原因,我的印象是,我只需要使用自定义标签来做到这一点。谢谢! – zmbq 2013-04-04 08:49:42

+0

33秒,直到我可以接受这个答案... – zmbq 2013-04-04 08:50:06

+2

19秒。他们应该停止这样做,有些答案可能因为人们感到厌倦而不被接受。 – zmbq 2013-04-04 08:50:33