【发布时间】:2015-10-31 10:13:14
【问题描述】:
Jinja 中有一个urlencode 过滤器,可以与{{ url | urlencode }} 一起使用,但我正在寻找一个“加号”版本,用+ 代替%20 代替空格,例如urllib.quote_plus() .是否有现成的东西,或者是时候使用自定义过滤器了?
【问题讨论】:
Jinja 中有一个urlencode 过滤器,可以与{{ url | urlencode }} 一起使用,但我正在寻找一个“加号”版本,用+ 代替%20 代替空格,例如urllib.quote_plus() .是否有现成的东西,或者是时候使用自定义过滤器了?
【问题讨论】:
不,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>
【讨论】:
XXX%20YYY 时会出现以下问题。我收到如下错误:/app/.heroku/python/lib/python2.7/urllib.py:1303: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - 将它们解释为不相等
str 和unicode 的混合物。请查看此问题以获取更多信息。 stackoverflow.com/questions/18193305/…
b'...' 表示仅用于在 Python 3 中显示; Python 2.7 将b'foo' 理解为'foo' 的同义词,但绝不会选择打印带有b 前缀的字符串。除非您使用一些 __future__ 导入,否则可能会改变这种情况? MCVE 可能会提出一个有趣的python2 问题。
env.filters['quote_plus'] = quote_plus?