рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛:
#!/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))
w/рдкрд╛рдпрдерди 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'"
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ iteritems рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ Python 3 рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЕрдкрд╡рд╛рдж рд╕реЗ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╣реИтАФрдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рдпрдерди 3 рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ Jinja2 v2.61 рдХреА 205-210 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд┐рдзрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рддреА рд╣реИрдВ:
# 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()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛/рд╡рд╣/рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ
рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЖрдпрд╛рдд рдЫрд╣
env = jinja2.Environment(loader=jinja2.FileSystemLoader('your_dir'))
env.globals['six_iteritems'] = six.iteritems
template = env.get_template('your_template')
рдлрд┐рд░ рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ:
рдЙрдкрдпреЛрдЧ:
{% рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП, рдЫрд╣_iteritems рдореЗрдВ рдорд╛рди (рдЖрдкрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг)%}
рдпрд╣ рдереЛрдбрд╝реЗ рдмрджрд╕реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
.items() рдХреЗ рдмрдЬрд╛рдп .iteritems() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ 3.x рдореЗрдВ iteritem рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВред рдЖрдкрдХреЛ
.items()
рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред