κ³ λ €νλ€:
#!/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()
λ‘ λ³κ²½ν΄μΌ ν©λλ€. μ κ° ν μ μλ μΌμ μμ΅λλ€.
μ΄κ²κ³Ό λ€λ₯Έ νμ΄μ¬ 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()κ° μλνμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
3.xμμλ μ¬μ μ iteritem λ©μλκ° μμ΅λλ€.
.items()
λ‘ λ³κ²½ν΄μΌ ν©λλ€. μ κ° ν μ μλ μΌμ μμ΅λλ€.