如何格式化具有多个键值的jinja2数据结构?

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

这是我正在制作的模板:

users:
{% for usr in users -%}
{# user {{ usr }} -#}
 - name: {{ users[usr].username }}
   passwd: {{ users[usr].hash }}
   ssh_authorized_keys: {{ users[usr].key }}
{% endfor %}

我一直在使用 jinja2 解析器来测试语法/逻辑:https://j2live.ttl255.com/

我的问题是,如何格式化字典/数据结构(我认为我需要使用的)来保存数据?

数据结构示例:

users:
  user1:
    username: queef
    hash: $6$eMRWO7k8SM
    key: 'sha-rsa $6$3EddsggdvX'
  user2:
    username: keagle
    hash: $6$eYYhaSqGDf45sEE
    key: '- sha-rsa $6$3AxxxX10HdvX'

我在网上找到的大多数示例都显示为平面列表,即:

{% set my_dict = {
    "name": "John",
    "age": 30,
    "city": "New York"
} %}

有人看过多键/值字典示例吗? 我只是假设这是我需要保存值的数组类型。由于我无法将它们存储在单独的 json/yaml 文件中,所以我需要以某种方式将数据保存在 jinja2 模板文件中。

{% set users = ({"user1" 
                 "Username" : "queef",
                 "Hash" : "$6$eMRWO7k8SM",
                 "Key" : " - sha-rsa $6$3EddsggdvX", 
                 "user2" 
                 "Username" : "keagle",
                 "Hash" : "$6$eYYhaSqGDf45sEE",
                 "Key" : " - sha-rsa $6$3AxxxX10HdvX"  }) -%}

让 jinja2 渲染键值并在 for 循环中输出它们。

给出错误: 渲染错误:

预期的令牌“,”,得到“:”

我期望它输出什么:

users:
- name: queef
   passwd: $6$eMRWO7k8SM
   ssh_authorized_keys: - sha-rsa $6$3EddsggdvX
- name: keagle
   passwd: $6$eYYhaSqGDf45sEE
   ssh_authorized_keys: - sha-rsa $6$3AxxxX10HdvX
python data-structures jinja2
1个回答
0
投票

对于其他可能在 jinja2 模板中使用字典的人:

每个人工智能生成器:

{% set users = [
    {
        'username': 'user1',
        'password': 'password1',
        'group': 'admin',
        'ssh_key': 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArX...'
    },
    {
        'username': 'user2',
        'password': 'password2',
        'group': 'developer',
        'ssh_key': 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArY...'
    },
    {
        'username': 'user3',
        'password': 'password3',
        'group': 'user',
        'ssh_key': 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArZ...'
    }
] %}
{% for user in users %}
User: {{ user.username }}
Password: {{ user.password }}
Group: {{ user.group }}
SSH Key: {{ user.ssh_key }}
---
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.