Jinja: urlencodeフィルターがありませんか?

作成日 2011年03月08日  ·  6コメント  ·  ソース: pallets/jinja

こんにちは、

組み込みフィルターのリスト(http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters)に「urlencode」フィルターが見つかりません。 それは行方不明ですか?

わかりません。jinja1にはこのフィルターが存在します: http ://wsgiarea.pocoo.org/jinja/docs/filters.html

それについてコメントはありますか?

よろしく、
ステファン

最も参考になるコメント

urlencodeフィルターを探している人のために、2012年に06a8b1c02b2091b31ef4f39ddde3184f25f58260と5145401fe5f9995a32757f34359623b87048ab8bに追加されました。 #85での議論。

これはurlencodeと呼ばれ、 urlquoteurlquoteplusurlquote_plusurlescapeではありません(検索でアクセスする他の人のためにこれらを追加します)。

全てのコメント6件

自分で作ってみませんか? 作成するときは、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と呼ばれ、 urlquoteurlquoteplusurlquote_plusurlescapeではありません(検索でアクセスする他の人のためにこれらを追加します)。

このページは役に立ちましたか?
0 / 5 - 0 評価