Jinja: ¿falta el filtro urlencode?

Creado en 8 mar. 2011  ·  6Comentarios  ·  Fuente: pallets/jinja

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

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 no urlquote , urlquoteplus , urlquote_plus o urlescape (añadiéndolos para cualquier otra persona que llegue a través de la búsqueda).

Todos 6 comentarios

¿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).

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

jp-costa picture jp-costa  ·  5Comentarios

humiaozuzu picture humiaozuzu  ·  3Comentarios

priestc picture priestc  ·  5Comentarios

DriverX picture DriverX  ·  4Comentarios

AMDmi3 picture AMDmi3  ·  4Comentarios