Jinja: filter urlencode hilang?

Dibuat pada 8 Mar 2011  ·  6Komentar  ·  Sumber: pallets/jinja

Hai,

di Daftar Filter Bawaan ( http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters ) saya tidak menemukan filter "urlencode". Itu hilang?

Saya tidak mengerti, di jinja1 filter ini ada: http://wsgiarea.pocoo.org/jinja/docs/filters.html

Apakah Anda memiliki beberapa komentar tentang itu?

Salam,
Stephane

Komentar yang paling membantu

Bagi siapa saja yang menemukan filter urlencode ini, filter ini telah ditambahkan kembali pada tahun 2012 di 06a8b1c02b2091b31ef4f39ddde3184f25f58260 dan 5145401fe5f9995a32757f34359623b87048ab8b. Diskusi di #85.

Ini disebut urlencode dan bukan urlquote , urlquoteplus , urlquote_plus atau urlescape (menambahkan ini untuk orang lain yang mendarat melalui pencarian).

Semua 6 komentar

kenapa tidak buat sendiri? saat membuatnya, berhati-hatilah untuk memahami bagaimana urllib.urlencode, urllib.quote dan urllib.quote_plus terkait.

bagi saya, saya akhirnya membuat fungsi yang dapat digunakan sebagai filter dan fungsi yang dapat dipanggil (dilakukan untuk aplikasi labu):

@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

digunakan dalam template sebagai fungsi:

{% set vendor_url = urlencode('http://www.google.com/search', q=adset.keyword.text) %}

digunakan dalam template sebagai filter:

{% set vendor_url = 'http://www.google.com/search?q=%s' % querytext %}
{{ vendor_url|urlencode }}

kenapa tidak buat sendiri?

Karena jinja2 sudah memiliki banyak filter bawaan (http://jinja.pocoo.org/docs/templates/#builtin-filters) dan urlencode adalah fitur klasik yang dapat ditambahkan di filter builin.

Salam,
Stefanus

urllib.quote_plus(uri)

Akan lebih baik jika ini bisa dilakukan untuk rilis utama. Ini adalah sesuatu yang diharapkan dalam sistem template selengkap jinja2.

@radekstepan @gfuchedzhy Saya mendapat kesan bahwa itu tidak sesederhana melewati string/Markup melalui kutipan atau kutipan plus. Dalam kasus saya, ini menyebabkan masalah unicode di quote_plus. Sepertinya unicode harus dikodekan ke utf-8 agar berfungsi dengan baik dengan quote_plus(). Inilah solusi saya:

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

Bagi siapa saja yang menemukan filter urlencode ini, filter ini telah ditambahkan kembali pada tahun 2012 di 06a8b1c02b2091b31ef4f39ddde3184f25f58260 dan 5145401fe5f9995a32757f34359623b87048ab8b. Diskusi di #85.

Ini disebut urlencode dan bukan urlquote , urlquoteplus , urlquote_plus atau urlescape (menambahkan ini untuk orang lain yang mendarat melalui pencarian).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat