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
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 }}
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)
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.
@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)
For anyone who stumbles on this looking for a urlencode
filter, it was added back in 2012 in 06a8b1c02b2091b31ef4f39ddde3184f25f58260 and 5145401fe5f9995a32757f34359623b87048ab8b. Discussion in #85.
It's called urlencode
and not urlquote
, urlquoteplus
, urlquote_plus
or urlescape
(adding these for anyone else landing via search).
Most helpful comment
For anyone who stumbles on this looking for a
urlencode
filter, it was added back in 2012 in 06a8b1c02b2091b31ef4f39ddde3184f25f58260 and 5145401fe5f9995a32757f34359623b87048ab8b. Discussion in #85.It's called
urlencode
and noturlquote
,urlquoteplus
,urlquote_plus
orurlescape
(adding these for anyone else landing via search).