Jinja: iteritems()λ₯Ό μ‚¬μš©ν•˜λŠ” Python 3 및 ν…œν”Œλ¦Ώμ˜ ν˜Όλ™ 였λ₯˜

에 λ§Œλ“  2012λ…„ 09μ›” 27일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: pallets/jinja

κ³ λ €ν•˜λ‹€:

#!/usr/bin/env python3

from collections import OrderedDict

import jinja2

t = '''
{% for key, value in d.iteritems() %}
* {{ key }}: {{ value }}
{% endfor %}
'''

jt = jinja2.Template(t)

d = OrderedDict()
d['one'] = 1
d['two'] = 2
d['three'] = 3

print(jt.render(d=d))

Python 3κ³Ό ν•¨κ»˜ μ‹€ν–‰ν•˜λ©΄ ν˜Όλž€μŠ€λŸ¬μš΄ μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€.

Traceback (most recent call last):
  File "jinja2-OrderedDict.py", line 20, in <module>
    print(jt.render(d=d))
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 895, in render
    return self.environment.handle_exception(exc_info, True)
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 671, in handle_exception
    raise exc_value.with_traceback(tb)
  File "<template>", line 2, in <module>
jinja2.exceptions.UndefinedError: b"'collections.OrderedDict object' has no attribute 'iteritems'"

μ΄λŠ” ν…œν”Œλ¦Ώμ΄ Python 3μ—μ„œ 제거된 iteritemsλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μœ„μ˜ μ˜ˆμ™Έμ—μ„œ λ¬Έμ œκ°€ ν…œν”Œλ¦Ώμ— μžˆλŠ”μ§€ λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ•Ό ν•©λ‹ˆλ‹€.

Jinja2 v2.61의 라인 205–210이 iteritems λ©”μ†Œλ“œλ₯Ό λ‹€μ‹œ μΆ”κ°€ν•˜κΈ° λ•Œλ¬Έμ— 일반 Python 3 μ‚¬μ „μ—μ„œ μž‘λ™ν•©λ‹ˆλ‹€.

    # not available on python 3
    if hasattr(dict, 'iterkeys'):
        iterkeys = _all('iterkeys')
        itervalues = _all('itervalues')
        iteritems = _all('iteritems')
    del _all

이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” κ°€μž₯ 쒋은 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? λ”•μ…”λ„ˆλ¦¬μ™€ 같은 객체λ₯Ό 더 잘 κ°μ§€ν•˜κ³  더 λ‚˜μ€ 였λ₯˜λ₯Ό λ±‰μ–΄λ‚΄λŠ” λ“±μ˜ μ‹œλ„λ₯Ό ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

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

3.xμ—μ„œλŠ” 사전에 iteritem λ©”μ„œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€. .items() 둜 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ œκ°€ ν•  수 μžˆλŠ” 일은 μ—†μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  5 λŒ“κΈ€

3.xμ—μ„œλŠ” 사전에 iteritem λ©”μ„œλ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€. .items() 둜 λ³€κ²½ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ œκ°€ ν•  수 μžˆλŠ” 일은 μ—†μŠ΅λ‹ˆλ‹€.

이것과 λ‹€λ₯Έ 파이썬 2to3 μ΄μƒν•œ 것듀을 μœ„ν•œ λ‚΄μž₯ ν•„ν„°κ°€ μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€.

κ±°λŒ€ν•œ 사전이 μ—†λŠ” ν•œ .items() λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 /that/λ‚˜μ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μˆ˜μž… 6

env = jinja2.Environment(loader=jinja2.FileSystemLoader('your_dir'))
env.globals['six_iteritems'] = six.iteritems
template = env.get_template('your_template')

그런 λ‹€μŒ ν…œν”Œλ¦Ώμ—μ„œ:

μ‚¬μš©ν•˜λ‹€:
{킀에 λŒ€ν•œ %, six_iteritems(κ·€ν•˜μ˜ λ³€μˆ˜) %}

그것은 μ•½κ°„ μΆ”μ•…ν•˜μ§€λ§Œ μž‘λ™ν•©λ‹ˆλ‹€.

λŒ€μ‹  .iteritems()λ₯Ό μ‚¬μš©ν•˜λ©΄ .iteritems()κ°€ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

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