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

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

这是我正在制作的模板:

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

我一直在使用 Jinja 解析器来测试语法/逻辑: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 文件中,因此我需要以某种方式将数据保存在 Jinja 模板文件中。

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

让 Jinja 渲染键值并在 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
投票

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

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

请注意,这不是一个列表,而是一个字典

您在 YAML 中显示的数据结构是映射的映射,因此在 Jinja/Python 中是字典的字典。

这是它在 Jinja 中的表示:

{%- set users = {
  "user1": {
    "username": "queef",
    "hash": "$6$eMRWO7k8SM",
    "key": "sha-rsa $6$3EddsggdvX",
  },
  "user2": {
    "username": "keagle",
    "hash": "$6$eYYhaSqGDf45sEE",
    "key": "- sha-rsa $6$3AxxxX10HdvX",
  },
} -%}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.