Skip to content
New issue

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

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

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
Copy link

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

@razamatan

This comment has been minimized.

Copy link
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

This comment has been minimized.

Copy link
Author

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

@radekstepan

This comment has been minimized.

Copy link

radekstepan commented Aug 11, 2011

urllib.quote_plus(uri)

@marians

This comment has been minimized.

Copy link

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

This comment has been minimized.

Copy link

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 pushed a commit to npigeon/mediagoblin that referenced this issue Nov 19, 2013

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

This comment has been minimized.

Copy link

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
You can’t perform that action at this time.