Jinja: рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐ w/рдкрд╛рдпрдерди 3 рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬреЛ iteritems рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ()

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рд╕рд┐рддре░ 2012  ┬╖  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))

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() рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

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

рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ 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() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛

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

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

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

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

RickGray picture RickGray  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

humiaozuzu picture humiaozuzu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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