Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

Already on GitHub? Sign in to your account

urlencode filter missing ? #17

Closed
harobed opened this Issue Mar 8, 2011 · 6 comments

Comments

Projects
None yet
6 participants

harobed commented Mar 8, 2011

Hi,

in List of Builtin Filters (http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters) I don't found "urlencode" filter. It's a missing ?

I don't understand, in jinja1 this filter exists : http://wsgiarea.pocoo.org/jinja/docs/filters.html

Do you have some comment about that ?

Regards,
Stéphane

Contributor

razamatan commented May 16, 2011

why not make your own? while making it, take care to understand how urllib.urlencode, urllib.quote and urllib.quote_plus are related.

for me, i ended up making a function that can be used as both a filter and callable function (done for a flask app):

@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

used in a template as a function:

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

used in a template as a filter:

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

harobed commented May 16, 2011

why not make your own ?

Because jinja2 have already many buildin filters (http://jinja.pocoo.org/docs/templates/#builtin-filters) and urlencode is a classic feature whose can be appended in builin filters.

Regards,
Stephane

urllib.quote_plus(uri)

marians commented Apr 27, 2012

Would be nice if this could be committed to the main release. It's something one would expect in a template system as complete as jinja2.

marians commented Apr 27, 2012

@radekstepan @gfuchedzhy I have the impression that it's not as simple as passing the string/Markup through quote or quote plus. In my case, this caused unicode problems in quote_plus. It seems as if unicode has to be encoded to utf-8 to work well with quote_plus(). Here is my solution:

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

@mitsuhiko mitsuhiko closed this May 20, 2013

@npigeon npigeon pushed a commit to npigeon/mediagoblin that referenced this issue Nov 19, 2013

@spaetz spaetz Provide jinja2 urlencode filter
Astonishingly, the great jinja2 does not provide a builtin urlquote filter,
although it is obviously needed. (jina1 had one) This is:
pallets/jinja#17

Provide an urlencode filter, based on werkzeug's url_quote_plus function.
This is dead easy to implement and gives us all the freedom we want.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
620e4e1

jace commented Feb 13, 2015

For anyone who stumbles on this looking for a urlencode filter, it was added back in 2012 in 06a8b1c and 5145401. Discussion in #85.

It's called urlencode and not urlquote, urlquoteplus, urlquote_plus or urlescape (adding these for anyone else landing via search).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment