Django 自定义过滤器错误。返回“无效过滤器”

Posted

技术标签:

【中文标题】Django 自定义过滤器错误。返回“无效过滤器”【英文标题】:Django custom filter error. Returns "invalid filter" 【发布时间】:2018-03-15 05:18:28 【问题描述】:

我一直在尝试在 Django 中创建这个自定义过滤器,但我一辈子都无法让它发挥作用。

在我的模板标签文件夹中,我的模板中有文件__init__.pyalcextra.py,我首先加载静态文件,然后加载模板标签。我已尝试重置服务器并再次删除和创建文件。

% load staticfiles % % load alcextra % 然后将其扩展到我的主 html 文件。我已经尝试将它放在主 html 文件中。

在 alcextra.py 中我写过

from django import template
register = template.Library()

@register.filter
def multiply(value, arg):
    return value * arg

我尝试过很多不同的@register 版本,比如

@register.filter("multiply", multiply) @register.filter(name="multiply") @register.filter() @register.simple_tag(takes_context=True

并且都返回相同的错误,无效的过滤器:'multiply'。在这一点上,我不知道该做什么或该尝试什么。

Overview of the directory

编辑:有问题的模板。

<!DOCTYPE html> % load staticfiles % % load alcextra %
<html>

<head>
  <script src="../../static/javascript/jquery-3.2.1.js"></script>
  <link rel="stylesheet" href="% static 'css/alcosearch.css' %" />
  <title>Alcosearch</title>
  <meta charset="utf-8" />
</head>

<body>
  <div class="pageheader">
    <h1>Alcosearch</h1>
    <h3>Vinmonopol søk</h2>
  </div>
  <div>
    % block content % % endblock %
  </div>
  </body>

</html>

令人讨厌的是,我在另一个项目中尝试过这个并且它成功了。所以我不完全确定我做了什么或没做什么。

编辑 2:

答案是@Alasdair 所说的。我以为我可以在模板中加载过滤器,然后在其他地方使用它,但事实并非如此。

【问题讨论】:

请出示您的模板。 【参考方案1】:

这是 Django 模板语言的documented feature,当您加载自定义标签或过滤器时,它不会自动在子模板中可用。

您没有在基本模板中使用过滤器,因此您不需要在那里加载alcextra 库。

然后将加载语句添加到任何使用过滤器的子模板中,例如:

% extends "base.html" %
% load alcextra %
% block content %
 my_value|multiply:5 
% endblock content %

【讨论】:

以上是关于Django 自定义过滤器错误。返回“无效过滤器”的主要内容,如果未能解决你的问题,请参考以下文章

使用 templatetags 方法的 Django 自定义过滤器不起作用!异常值为:无效过滤器:'dict_'

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

django-跳转页面--模板-自定义过滤器

Django中自定义过滤器的使用

django 编写我的第一个自定义模板标签和过滤器

测试自定义 Django 模板过滤器