Jinja: urlencode рдлрд╝рд┐рд▓реНрдЯрд░ рдЧреБрдо рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдорд╛рд░реНрдЪ 2011  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pallets/jinja

рдирдорд╕реНрддреЗ,

рдмрд┐рд▓реНрдЯрд┐рди рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рд╕реВрдЪреА рдореЗрдВ (http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters) рдореБрдЭреЗ "urlencode" рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдпрд╣ рд▓рд╛рдкрддрд╛ рд╣реИ?

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛, рдЬрд┐рдиреНрдЬрд╛1 рдореЗрдВ рдпрд╣ рдлрд┐рд▓реНрдЯрд░ рдореМрдЬреВрдж рд╣реИ: http://wsgiarea.pocoo.org/jinja/docs/filters.html

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреА рд╣реИ?

рд╕рд╛рджрд░,
рд╕реНрдЯреЗрдлрд╝рдиреА

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

urlencode рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ 2012 рдореЗрдВ 06a8b1c02b2091b31ef4f39ddde3184f25f58260 рдФрд░ 5145401fe5f9995a32757f34359623b87048ab8b рдореЗрдВ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред #85 рдореЗрдВ рдЪрд░реНрдЪрд╛ред

рдЗрд╕реЗ urlencode рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рди рдХрд┐ urlquote , urlquoteplus , urlquote_plus рдпрд╛ urlescape (рдЦреЛрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЗрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдирд╛)ред

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдкрдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рддреЗ? рдЗрд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп, рдпрд╣ рд╕рдордЭрдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ urllib.urlencode, urllib.quote рдФрд░ urllib.quote_plus рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред

рдореЗрд░реЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд┐рд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдлрд╝рдВрдХреНрд╢рди (рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛) рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

@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

рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

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

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

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

рдЕрдкрдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рддреЗ?

рдХреНрдпреЛрдВрдХрд┐ jinja2 рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдмрд┐рд▓реНрдбрд┐рди рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реИрдВ (http://jinja.pocoo.org/docs/templates/#builtin-filters) рдФрд░ urlencode рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмреБрдЗрд▓рд┐рди рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рджрд░,
рд╕реНрдЯреАрдлрд╝рди

urllib.quote_plus(uri)

рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рдореБрдЦреНрдп рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛред рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ jinja2 рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред

@radekstepan @gfuchedzhy рдореБрдЭреЗ рдпрд╣ рдЖрднрд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджреНрдзрд░рдг рдпрд╛ рдЙрджреНрдзрд░рдг рдкреНрд▓рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ/рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рд╕реЗ рдЙрджреНрдзрд░рдг_рдкреНрд▓рд╕ рдореЗрдВ рдпреВрдирд┐рдХреЛрдб рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реБрдИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпреВрдирд┐рдХреЛрдб рдХреЛ utf-8 рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЙрджреНрдзрд░рдг_рдкреНрд▓рд╕ () рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ:

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

urlencode рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ 2012 рдореЗрдВ 06a8b1c02b2091b31ef4f39ddde3184f25f58260 рдФрд░ 5145401fe5f9995a32757f34359623b87048ab8b рдореЗрдВ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред #85 рдореЗрдВ рдЪрд░реНрдЪрд╛ред

рдЗрд╕реЗ urlencode рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рди рдХрд┐ urlquote , urlquoteplus , urlquote_plus рдпрд╛ urlescape (рдЦреЛрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЗрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдирд╛)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

glasserc picture glasserc  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

htgoebel picture htgoebel  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

priestc picture priestc  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Xion picture Xion  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

samatjain picture samatjain  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ