Jinja: urlencode ν•„ν„°κ°€ λˆ„λ½ λ˜μ—ˆμŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2011λ…„ 03μ›” 08일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: pallets/jinja

μ•ˆλ…•,

λ‚΄μž₯ ν•„ν„° λͺ©λ‘(http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters)μ—μ„œ "urlencode" ν•„ν„°λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€. λˆ„λ½μΈκ°€μš”?

λ‚˜λŠ” jinja1에이 ν•„ν„°κ°€ μ‘΄μž¬ν•œλ‹€λŠ” 것을 이해할 수 μ—†μŠ΅λ‹ˆλ‹€. http://wsgiarea.pocoo.org/jinja/docs/filters.html

그것에 λŒ€ν•΄ 의견이 μžˆμœΌμ‹­λ‹ˆκΉŒ?

λ¬Έμ•ˆ 인사,
μŠ€ν…ŒνŒ

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

urlencode ν•„ν„°λ₯Ό μ°ΎλŠ” 이 ν•­λͺ©μ„ λ°œκ²¬ν•œ μ‚¬λžŒμ„ μœ„ν•΄ 2012λ…„ 06a8b1c02b2091b31ef4f39ddde3184f25f58260 및 5145401fe5f9995a32757f3483에 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. #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μ—λŠ” 이미 λ§Žμ€ buildin ν•„ν„°(http://jinja.pocoo.org/docs/templates/#builtin-filters)κ°€ 있고 urlencodeλŠ” builin 필터에 μΆ”κ°€ν•  수 μžˆλŠ” 고전적인 κΈ°λŠ₯이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

λ¬Έμ•ˆ 인사,
μŠ€ν…ŒνŒ

urllib.quote_plus(uri)

이것이 μ£Όμš” λ¦΄λ¦¬μŠ€μ— 컀밋될 수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€. jinja2와 같이 μ™„μ „ν•œ ν…œν”Œλ¦Ώ μ‹œμŠ€ν…œμ—μ„œ κΈ°λŒ€ν•  수 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.

@radekstepan @gfuchedzhy μΈμš©λΆ€ν˜Έλ‚˜ μΈμš©λΆ€ν˜Έ λ”ν•˜κΈ°λ₯Ό 톡해 λ¬Έμžμ—΄/λ§ˆν¬μ—…μ„ μ „λ‹¬ν•˜λŠ” κ²ƒλ§ŒνΌ κ°„λ‹¨ν•˜μ§€ μ•Šλ‹€λŠ” 인상을 λ°›μ•˜μŠ΅λ‹ˆλ‹€. 제 κ²½μš°μ—λŠ” quote_plusμ—μ„œ μœ λ‹ˆμ½”λ“œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. quote_plus()와 잘 μž‘λ™ν•˜λ €λ©΄ μœ λ‹ˆμ½”λ“œκ°€ 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 및 5145401fe5f9995a32757f3483에 μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. #85의 ν† λ‘ .

urlencode 라고 ν•˜λ©° $ urlquote , urlquoteplus , urlquote_plus λ˜λŠ” urlescape κ°€ μ•„λ‹™λ‹ˆλ‹€(검색을 톡해 λ°©λ¬Έν•˜λŠ” λ‹€λ₯Έ μ‚¬λžŒμ„ μœ„ν•΄ μΆ”κ°€).

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰