自分で作ってみませんか? 作成するときは、urllib.urlencode、urllib.quote、およびurllib.quote_plusがどのように関連しているかを理解するように注意してください。
私にとっては、フィルターと呼び出し可能関数の両方として使用できる関数を作成することになりました(フラスコアプリ用に実行):
@app.template_filter('urlencode')
def urlencode(uri, **query):
parts = list(urlparse.urlparse(uri))
q = urlparse.parse_qs(parts[4])
q.update(query)
parts[4] = urllib.urlencode(q)
return urlparse.urlunparse(parts)
app.jinja_env.globals['urlencode'] = urlencode
テンプレートで関数として使用されます:
{% set vendor_url = urlencode('http://www.google.com/search', q=adset.keyword.text) %}
テンプレートでフィルターとして使用:
{% set vendor_url = 'http://www.google.com/search?q=%s' % querytext %}
{{ vendor_url|urlencode }}
自分で作ってみませんか?
jinja2にはすでに多くの組み込みフィルター(http://jinja.pocoo.org/docs/templates/#builtin-filters)があり、urlencodeはbuilinフィルターに追加できる古典的な機能であるためです。
よろしく、
ステファン
urllib.quote_plus(uri)
これがメインリリースにコミットできればいいのにと思います。 これは、jinja2と同じくらい完全なテンプレートシステムに期待されるものです。
@ radekstepan @ gfuchedzhy文字列/マークアップを引用符または引用符プラスで渡すほど単純ではないという印象があります。 私の場合、これによりquote_plusでUnicodeの問題が発生しました。 quote_plus()でうまく機能するには、Unicodeをutf-8にエンコードする必要があるようです。 これが私の解決策です:
@app.template_filter('urlencode')
def urlencode_filter(s):
if type(s) == 'Markup':
s = s.unescape()
s = s.encode('utf8')
s = urllib.quote_plus(s)
return Markup(s)
urlencode
フィルターを探している人のために、2012年に06a8b1c02b2091b31ef4f39ddde3184f25f58260と5145401fe5f9995a32757f34359623b87048ab8bに追加されました。 #85での議論。
これはurlencode
と呼ばれ、 urlquote
、 urlquoteplus
、 urlquote_plus
、 urlescape
ではありません(検索でアクセスする他の人のためにこれらを追加します)。
最も参考になるコメント
urlencode
フィルターを探している人のために、2012年に06a8b1c02b2091b31ef4f39ddde3184f25f58260と5145401fe5f9995a32757f34359623b87048ab8bに追加されました。 #85での議論。これは
urlencode
と呼ばれ、urlquote
、urlquoteplus
、urlquote_plus
、urlescape
ではありません(検索でアクセスする他の人のためにこれらを追加します)。