【问题标题】:How to use multiple custom jinja filters on an element如何在一个元素上使用多个自定义 jinja 过滤器
【发布时间】:2015-05-17 22:55:34
【问题描述】:

我为我的 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))

示例帖子:

Hey, @john. imghttp://image.com/image.jpeg 

【问题讨论】:

    标签: python python-3.x flask jinja2


    【解决方案1】:

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

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

    以下修复对我有用(仅在最后一个过滤器中调用 Markup):

    Html 模板(不变):

    {{ 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 2021-07-31
      • 2012-07-08
      • 2023-04-03
      相关资源
      最近更新 更多