Jinja: URL-Filter fehlt?

Erstellt am 8. März 2011  ·  6Kommentare  ·  Quelle: pallets/jinja

Hallo,

in der Liste der eingebauten Filter (http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters) habe ich den "urlencode"-Filter nicht gefunden. Es fehlt?

Ich verstehe nicht, in jinja1 existiert dieser Filter: http://wsgiarea.pocoo.org/jinja/docs/filters.html

Hast du einen Kommentar dazu?

Grüße,
Stephan

Hilfreichster Kommentar

Für alle, die auf der Suche nach einem urlencode -Filter darüber stolpern, es wurde 2012 in 06a8b1c02b2091b31ef4f39ddde3184f25f58260 und 5145401fe5f9995a32757f34359623b87048ab8b hinzugefügt. Diskussion in #85.

Es heißt urlencode und nicht urlquote , urlquoteplus , urlquote_plus oder urlescape (diese werden für alle anderen hinzugefügt, die über die Suche landen).

Alle 6 Kommentare

warum nicht selber machen? Achten Sie bei der Erstellung darauf, zu verstehen, wie urllib.urlencode, urllib.quote und urllib.quote_plus zusammenhängen.

Für mich habe ich am Ende eine Funktion erstellt, die sowohl als Filter als auch als aufrufbare Funktion verwendet werden kann (für eine 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

in einer Vorlage als Funktion verwendet:

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

in einer Vorlage als Filter verwendet:

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

warum nicht selber machen?

Weil jinja2 bereits viele eingebaute Filter hat (http://jinja.pocoo.org/docs/templates/#builtin-filters) und URL-Code ein klassisches Feature ist, das in eingebaute Filter angehängt werden kann.

Grüße,
Stéphane

urllib.quote_plus(uri)

Wäre schön, wenn dies in die Hauptversion übernommen werden könnte. Das ist etwas, was man in einem so vollständigen Template-System wie jinja2 erwarten würde.

@radekstepan @gfuchedzhy Ich habe den Eindruck, dass es nicht so einfach ist, die Zeichenfolge/das Markup durch Anführungszeichen oder Anführungszeichen plus zu übergeben. In meinem Fall führte dies zu Unicode-Problemen in quote_plus. Es scheint, als ob Unicode in utf-8 kodiert werden muss, um gut mit quote_plus() zu funktionieren. Hier ist meine Lösung:

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

Für alle, die auf der Suche nach einem urlencode -Filter darüber stolpern, es wurde 2012 in 06a8b1c02b2091b31ef4f39ddde3184f25f58260 und 5145401fe5f9995a32757f34359623b87048ab8b hinzugefügt. Diskussion in #85.

Es heißt urlencode und nicht urlquote , urlquoteplus , urlquote_plus oder urlescape (diese werden für alle anderen hinzugefügt, die über die Suche landen).

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen