Python 如何在一个元素上使用多个自定义jinja过滤器

Python 如何在一个元素上使用多个自定义jinja过滤器,python,python-3.x,flask,jinja2,Python,Python 3.x,Flask,Jinja2,我已经为我的jinja模板创建了两个自定义过滤器。当我尝试将两个过滤器应用于一个元素时,只有一个过滤器可以工作。如何使两个过滤器都工作 {{ post.content|makeimg|taguser|truncate(200)|urlize(40, true) }} 除第二个过滤器外,其他所有过滤器都能工作。前两个过滤器是我做的 以下是过滤器的代码: @app.template_filter('taguser') def taguser(text): return Markup

我已经为我的jinja模板创建了两个自定义过滤器。当我尝试将两个过滤器应用于一个元素时,只有一个过滤器可以工作。如何使两个过滤器都工作

{{ post.content|makeimg|taguser|truncate(200)|urlize(40, true) }}
除第二个过滤器外,其他所有过滤器都能工作。前两个过滤器是我做的

以下是过滤器的代码:

@app.template_filter('taguser')
    def taguser(text):
    return Markup(re.sub(r'@([a-zA-Z0-9_]+)', r'<a href="/\1">@\1</a>', text))

@app.template_filter('makeimg')
    def makeimg(text):
    return Markup(re.sub(r'img([a-zA-Z0-9_./:-]+)', r'<img width="100px" src="\1">', text))

问题不在于过滤器。。两个过滤器都按预期工作

您的错误是调用了两次
Markup
方法

以下修复对我有效(仅在最后一个筛选器中调用
标记
):

Html模板(未更改):

代码

@app.template_filter('taguser')
def taguser(text):
    return Markup(re.sub(r'@([a-zA-Z0-9_]+)', r'<a href="/\1">@\1</a>', text))

@app.template_filter('makeimg')
def makeimg(text):
    return re.sub(r'img([a-zA-Z0-9_./:-]+)', r'<img width="100px" src="\1">', text)
@app.template\u过滤器('taguser'))
def标记用户(文本):
返回标记(re.sub(r'@([a-zA-Z0-9_]+)',r'',文本))
@app.template\u过滤器('makeimg'))
def makeimg(文本):
返回re.sub(r'img([a-zA-Z0-9./:-]+)',r'',文本)
{{ post.content|makeimg|taguser|truncate(200)|urlize(40, true) }}
@app.template_filter('taguser')
def taguser(text):
    return Markup(re.sub(r'@([a-zA-Z0-9_]+)', r'<a href="/\1">@\1</a>', text))

@app.template_filter('makeimg')
def makeimg(text):
    return re.sub(r'img([a-zA-Z0-9_./:-]+)', r'<img width="100px" src="\1">', text)