簡體   English   中英

在Jinja2語句中使用Jinja2表達式

[英]Using Jinja2 Expression within Jinja2 Statement

假設我有以下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 %}

但是我想根據列表['dev','prod'等...]中包含的部署環境動態比較amis。 以下包含模板錯誤,因為語句內有一個表達式,例如- {% {{ .. }} %}

{% 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 %}

我已經檢查了各種過濾器,到目前為止還沒有成功。 希望獲得有關此特定實現正常工作的建議。 先感謝您。

我認為您可能會想到錯誤的數據結構來解決問題。

為了比較不同環境中的amis,動態生成變量名對我來說聽起來像是過大的殺傷力。 您熟悉列表和詞典嗎?

嘗試從這樣的東西(偽代碼)開始:

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]:
      [...]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM