Hola,
en la Lista de filtros incorporados (http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters) no encontré el filtro "urlencode". es un desaparecido?
No entiendo, en jinja1 existe este filtro: http://wsgiarea.pocoo.org/jinja/docs/filters.html
¿Tienes algún comentario al respecto?
Saludos,
Stéphane
¿por qué no hacer el tuyo? mientras lo hace, tenga cuidado de comprender cómo se relacionan urllib.urlencode, urllib.quote y urllib.quote_plus.
para mí, terminé creando una función que se puede usar como filtro y función invocable (hecha para una aplicación de frasco):
@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
utilizado en una plantilla como una función:
{% set vendor_url = urlencode('http://www.google.com/search', q=adset.keyword.text) %}
utilizado en una plantilla como filtro:
{% set vendor_url = 'http://www.google.com/search?q=%s' % querytext %}
{{ vendor_url|urlencode }}
¿por qué no hacer el tuyo propio?
Porque jinja2 ya tiene muchos filtros integrados (http://jinja.pocoo.org/docs/templates/#builtin-filters) y urlencode es una función clásica que se puede agregar a los filtros integrados.
Saludos,
Estefanía
urllib.quote_plus(uri)
Sería bueno si esto pudiera comprometerse con el lanzamiento principal. Es algo que uno esperaría en un sistema de plantillas tan completo como jinja2.
@radekstepan @gfuchedzhy Tengo la impresión de que no es tan simple como pasar la cadena/marcado a través de comillas o comillas más. En mi caso, esto causó problemas con Unicode en quote_plus. Parece como si Unicode tuviera que estar codificado en utf-8 para funcionar bien con quote_plus(). Aquí está mi solución:
@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)
Para cualquiera que se encuentre con esto buscando un filtro urlencode
, se agregó en 2012 en 06a8b1c02b2091b31ef4f39ddde3184f25f58260 y 5145401fe5f9995a32757f34359623b87048ab8b. Discusión en el #85.
Se llama urlencode
y no urlquote
, urlquoteplus
, urlquote_plus
o urlescape
(añadiéndolos para cualquier otra persona que llegue a través de la búsqueda).
Comentario más útil
Para cualquiera que se encuentre con esto buscando un filtro
urlencode
, se agregó en 2012 en 06a8b1c02b2091b31ef4f39ddde3184f25f58260 y 5145401fe5f9995a32757f34359623b87048ab8b. Discusión en el #85.Se llama
urlencode
y nourlquote
,urlquoteplus
,urlquote_plus
ourlescape
(añadiéndolos para cualquier otra persona que llegue a través de la búsqueda).