自定义过滤器仅适用于特定名称 jinja2

Custom filter only works for certain name jinja2

所以我尝试在 jinja2 和 flask 中使用自定义过滤器 所以这是问题所在:

这是 html 文件

<h1>Hello, {{ user.nickname | reverse }}!</h1>

这是py文件

from app import app

def reverse_filter(s):
    return s[::-1]


app.jinja_env.filters['reverse'] = reverse_filter

上面的代码运行良好。但是现在,如果我将名称 'reverse' 更改为例如 'mouse'

<h1>Hello, {{ user.nickname | mouse }}!</h1>

然后是新py

from app import app

def mouse_filter(s):
    return s[::-1]


app.jinja_env.filters['mouse'] = mouse_filter

它会给我 jinja2.exceptions.TemplateAssertionError: no filter named 'mouse'

真的很奇怪……我是不是做错了什么?

我发现错误了, 我将过滤器放在与 __init__.py 文件不同的文件 (jinja_custom_filter.py) 中,因此我需要将

from app import jinja_custom_filter.py 在我的 init 文件中以便能够使用它。

虽然

仍然不明白为什么我需要将每个参考文件都放在 __init__.py