Использование выражения Jinja2 в выражении Jinja2 - PullRequest
0 голосов
/ 17 мая 2018

Допустим, у меня есть следующие переменные Jinja2:

  • 'dev_ami' = 'ami-123456'
  • 'dev_located_ami' = 'ami-123456'
  • 'prod_ami' = 'ami-654321'
  • 'prod_located_ami' = 'ami-654321'

Я хотел бы установить условие, когда переменная 'dev_ami' равна переменной 'dev_located_ami'. Это легко сделать, как показано в следующем утверждении:

{% if dev_ami == dev_located_ami %}
... do some stuff
{% else %}
... do some other stuff
{% endif %}

Но я хотел бы динамически сравнить amis на основе среды развертывания, содержащейся в списке ['dev', 'prod' и т. Д.]. Следующее содержит шаблонную ошибку, поскольку в выражении есть выражение как таковое - {% {{ .. }} %}:

{% for env_type in ['dev','prod'] %}
{% if {{ env_type }}_ami == {{ env_type }}_located_ami %}
... do stuff
{% else %}
... do other stuff
{% endif %}
{% endfor %}

Я попытался установить переменные для представления выражений, которые я хотел бы видеть в следующем коде, но, к сожалению, они скомпилированы буквально как 'dev_ami' и 'dev_located_ami', тогда как я хотел бы, чтобы они были скомпилированы с соответствующими им значениями переменных 'ami-123456' и 'ami-123456':

{% for env_type in ['dev','prod'] %}
{% set ami = "%s_ami"|format(env_type) %}
{% set located_ami = "%s_located_ami"|format(env_type) %}
{% if ami == located_ami %}
... do stuff
{% else %}
... do other stuff
{% endif %}
{% endfor %}

Я проверил различные фильтры и до сих пор не добился успеха. Буду признателен за совет по правильной работе этой конкретной реализации. Заранее спасибо.

1 Ответ

0 голосов
/ 17 мая 2018

Думаю, вы подходите к проблеме с неправильной структурой данных.

Динамическое создание имен переменных для сравнения значений в разных средах для меня звучит как огромное излишество. Вы знакомы со списками и словарями?

Попробуйте начать с чего-то вроде этого (псевдокод):

dict = { environments:
            prod:
               ami1: foo
               ami1_located: foo
            dev:
               ami1: bar
               ami1_located:baz
}

for env in dict[environments]:
   if env[ami1] == env[ami1_located]:
      [...]
...