如何更新 jinja2 中的字典键值列表

问题描述 投票:0回答:1

我已将字典的键

domain
设置为空字符串“”。我正在检查 dict key
ssluser
的 var 字段是否已定义,如果是,则需要填写从提供的用户值中提取的电子邮件域密钥数据。

{% 
  set sslusers= [
    {      
      'ssluser': SSL_VPN_User01,
      'sslusercred': SSL_USER_CRED01,
      'index': 0,
      'domain': ""
    },
    {
      'ssluser': SSL_VPN_User02,
      'sslusercred': SSL_USER_CRED02,
      'index': 1,
      'domain': ""
    },
    {     
      'ssluser': SSL_VPN_User03,
      'sslusercred': SSL_USER_CRED03,
      'index': 2,
      'domain': ""
    },
    {   
      'ssluser': SSL_VPN_User04,
      'sslusercred': SSL_USER_CRED04,
      'index': 3,
      'domain': ""
    },
    {      
      'ssluser': SSL_VPN_User05,
      'sslusercred': SSL_USER_CRED05,
      'index': 4,
      'domain': ""
    },
    {
      'ssluser': SSL_VPN_User06,
      'sslusercred': SSL_USER_CRED06,
      'index': 5,
      'domain': ""
    },
    {     
      'ssluser': SSL_VPN_User07,
      'sslusercred': SSL_USER_CRED07,
      'index': 6,
      'domain': ""
    },
    {   
      'ssluser': SSL_VPN_User08,
      'sslusercred': SSL_USER_CRED08,
      'index': 7,
      'domain': ""
    },
    {      
      'ssluser': SSL_VPN_User09,
      'sslusercred': SSL_USER_CRED09,
      'index': 8,
      'domain': ""
    },
    {
      'ssluser': SSL_VPN_User10,
      'sslusercred': SSL_USER_CRED10,
      'index': 9,
      'domain': ""
    }
  ] 
%}

我正在努力做到这一点:

{%- for item in sslusers if item.ssluser is defined %}
    {% set domain_value_old = item.domain %}
    {% for key, value in item.items() %}
        {% if key == 'domain' %}
            {% set domain_value_new = item.domain.split('@') | last %}
            <update dicts in the list with the new value only for 'domain' key>
        {% endif %}
     {% endfor %}
{% endfor %}

我被困在

{% if key == 'domain' %}
之后的部分,因为我得到domain_value_new未定义,然后我不知道如何将密钥更新为新值,如果我可以定义它的话。对于上下文,我在 cli 脚本中使用它,该脚本是在网络设备上运行的 jinja 模板。

更新---

我能够通过这个块克服未定义的 var 部分:

{%- for item in sslusers if item.ssluser is defined %}
    {% set domain_value_old = item.domain %}
    {% set domain_value_new = item.ssluser.split('@') | last %}
    {% for dict_item in item['domain'] %}
        {{ domain_value_new }}
    {% endfor %}
{% endfor %}

现在我已经将

domain
键的新字符串分配给了新的 var,我将如何传递回字典列表以用新值替换空字符串?不确定我所拥有的是否正常工作,因为我所拥有的设备中的调试微不足道。

python jinja2 jinja2-cli
1个回答
0
投票

这是我的用例的工作解决方案

{%- for item in sslusers if item.ssluser is defined %}
    {% set domain_value_new = item.ssluser.split('@') | last %}
    {%- set _ = item.update({'domain': domain_value_new}) -%}
{% endfor %}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.