Jinja: filtre urlencode manquant ?

Créé le 8 mars 2011  ·  6Commentaires  ·  Source: pallets/jinja

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

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 non urlquote , urlquoteplus , urlquote_plus ou urlescape (en les ajoutant pour toute autre personne atterrissant via la recherche).

Tous les 6 commentaires

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

Cette page vous a été utile?
0 / 5 - 0 notes