Salut,
dans la liste des filtres intégrés (http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters) je n'ai pas trouvé de filtre "urlencode". C'est un manquant ?
Je ne comprends pas, dans jinja1 ce filtre existe : http://wsgiarea.pocoo.org/jinja/docs/filters.html
Avez-vous un commentaire à ce sujet ?
Salutations,
Stéphane
pourquoi ne pas fabriquer le vôtre ? en le faisant, prenez soin de comprendre comment urllib.urlencode, urllib.quote et urllib.quote_plus sont liés.
pour moi, j'ai fini par créer une fonction qui peut être utilisée à la fois comme filtre et comme fonction appelable (faite pour une application flask):
@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
utilisé dans un modèle en tant que fonction :
{% set vendor_url = urlencode('http://www.google.com/search', q=adset.keyword.text) %}
utilisé dans un modèle comme filtre :
{% set vendor_url = 'http://www.google.com/search?q=%s' % querytext %}
{{ vendor_url|urlencode }}
pourquoi ne pas fabriquer le vôtre ?
Parce que jinja2 a déjà de nombreux filtres intégrés (http://jinja.pocoo.org/docs/templates/#builtin-filters) et urlencode est une fonctionnalité classique qui peut être ajoutée dans les filtres intégrés.
Salutations,
Stéphane
urllib.quote_plus(uri)
Ce serait bien si cela pouvait être engagé dans la version principale. C'est quelque chose que l'on pourrait attendre d'un système de template aussi complet que jinja2.
@radekstepan @gfuchedzhy J'ai l'impression que ce n'est pas aussi simple que de passer la chaîne/Markup par quote ou quote plus. Dans mon cas, cela a causé des problèmes d'unicode dans quote_plus. Il semble que Unicode doive être encodé en utf-8 pour bien fonctionner avec quote_plus(). Voici ma 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)
Pour tous ceux qui trébuchent sur ce filtre à la recherche d'un filtre urlencode
, il a été ajouté en 2012 dans 06a8b1c02b2091b31ef4f39ddde3184f25f58260 et 5145401fe5f9995a32757f34359623b87048ab8b. Débat au #85.
Il s'appelle urlencode
et non urlquote
, urlquoteplus
, urlquote_plus
ou urlescape
(en les ajoutant pour toute autre personne atterrissant via la recherche).
Commentaire le plus utile
Pour tous ceux qui trébuchent sur ce filtre à la recherche d'un filtre
urlencode
, il a été ajouté en 2012 dans 06a8b1c02b2091b31ef4f39ddde3184f25f58260 et 5145401fe5f9995a32757f34359623b87048ab8b. Débat au #85.Il s'appelle
urlencode
et nonurlquote
,urlquoteplus
,urlquote_plus
ouurlescape
(en les ajoutant pour toute autre personne atterrissant via la recherche).