Как включить / расширить строковую переменную шаблона Jinja2 в другую переменную

#python #django #jinja2

#python #django #jinja2

Вопрос:

Пытаюсь упростить код, вложив шаблоны, подобные этому:

 base = Template('''
  - alert:
     cluster: {{cluster}}
     role: {{role}}
     slack: {{slack}}
''')

alert = Template('''
    {% include base %}
     description: Critical {{role}} system load
     threshold: xxx-yyy-zzz
''')

print alert.render(cluster='cluster1', slack='alerts', role='database')
  

Вышеуказанное не работает, получая исключение:

   File "/usr/local/lib/python2.7/site-packages/jinja2/environment.py", line 989, in render
    return self.environment.handle_exception(exc_info, True)
  File "/usr/local/lib/python2.7/site-packages/jinja2/environment.py", line 754, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "<template>", line 2, in top-level template code
TypeError: no loader for this environment specified
  

Пожалуйста, посоветуйте.

Комментарии:

1. Подсказка: Проблема заключается в {% include base %}

2. Понял, вопрос, как заставить include работать..

Ответ №1:

Вы просто не передаете ссылку на base при рендеринге alert шаблона.

 >>> print alert.render(cluster='cluster1', slack='alerts', role='database', base=base)
################                         just pass this reference of `base` ^

  - alert:
     cluster: cluster1
     role: database
     slack: alerts
     description: Critical database system load
     threshold: xxx-yyy-zzz