Django 找不到我的自定义模板过滤器

Posted

技术标签:

【中文标题】Django 找不到我的自定义模板过滤器【英文标题】:Django can't find my custom template filter 【发布时间】:2013-03-26 05:38:23 【问题描述】:

我正在尝试在我的 Django 应用程序中创建自定义模板过滤器。我在我的应用下创建了一个 templatetags 文件夹,添加了一个 __init__.py 文件和一个带有过滤器的 filters.py 文件,如下所示:

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 命名正确 使用manage.py shell 打开一个shell 后,我可以像这样导入我的过滤器:import app.templatetags 我也可以从 Django shell 中正确使用过滤器 我已经重启了 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>

【问题讨论】:

您也可以发布您的模板吗? 已发布。这当然是模板的精简版。 我的问题是在创建模板标签文件后手动重新启动 django 服务器。要检查的事情的摘要! 【参考方案1】:

您需要在模板中使用% load name_of_file_tags_are_in %

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

【讨论】:

难以置信!出于某种原因,我的印象是我只需要使用自定义标签来执行此操作。谢谢! 19 秒。他们真的应该停止这样做,有些答案可能会因为人们厌倦而无法接受。 您也可以使用django.template.add_to_builtins() 使您的过滤器可用,而无需明确% load % 不知何故 % load % 对我不起作用,但 add_to_builtins 完全没问题。 加载对我也不起作用,为什么会这样?

以上是关于Django 找不到我的自定义模板过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Django - 如何在任何包含的模板中使用我的自定义过滤器?

Django将多个参数传递给If语句中的自定义模板过滤器

“模板语法错误:过滤器无效:”;基于 django 文档的自定义 django 模板过滤器损坏,但模板标签有效

django自定义模板标签和过滤器

Django 自定义模板过滤器不起作用

Django 自定义模板过滤器不起作用