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
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).
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 nichturlquote
,urlquoteplus
,urlquote_plus
oderurlescape
(diese werden für alle anderen hinzugefügt, die über die Suche landen).