【问题标题】:quote_plus URL-encode filter in Jinja2Jinja2 中的 quote_plus URL 编码过滤器
【发布时间】:2015-10-31 10:13:14
【问题描述】:

Jinja 中有一个urlencode 过滤器,可以与{{ url | urlencode }} 一起使用,但我正在寻找一个“加号”版本,用+ 代替%20 代替空格,例如urllib.quote_plus() .是否有现成的东西,或者是时候使用自定义过滤器了?

【问题讨论】:

    标签: python flask jinja2


    【解决方案1】:

    不,Jinja2 没有像quote_plus 这样的内置方法;您将需要创建一个自定义过滤器。

    Python

    from flask import Flask
    # for python2 use 'from urllib import quote_plus' instead
    from urllib.parse import quote_plus
    
    app = Flask('my_app')    
    app.jinja_env.filters['quote_plus'] = lambda u: quote_plus(u)
    

    HTML

    <html>
       {% set url = 'http://stackoverflow.com/questions/33450404/quote-plus-urlencode-filter-in-jinja' %}
       {{ url|quote_plus }}
    </html>
    

    【讨论】:

    • 我确实遇到了这个问题,例如将 |quote_plus 应用到XXX%20YYY 时会出现以下问题。我收到如下错误:/app/.heroku/python/lib/python2.7/urllib.py:1303: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - 将它们解释为不相等
    • @Navonod 您可能正在使用strunicode 的混合物。请查看此问题以获取更多信息。 stackoverflow.com/questions/18193305/…
    • 我现在使用 .encode("utf-8") 进行了转换,这意味着 quote_plus 现在可以工作,但现在我的结果中出现了一个讨厌的 b'string'
    • @disruptive 这让......毫无意义。您的错误清楚地表明您使用的是 Python 2,但据我所知,字节字符串的 b'...' 表示仅用于在 Python 3 中显示; Python 2.7 将b'foo' 理解为'foo' 的同义词,但绝不会选择打印带有b 前缀的字符串。除非您使用一些 __future__ 导入,否则可能会改变这种情况? MCVE 可能会提出一个有趣的python2 问题。
    • 为什么不使用env.filters['quote_plus'] = quote_plus
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多