Python значение индекса как значение элемента - PullRequest
1 голос
/ 16 июня 2020

Я использую jinja2 для шаблонов нескольких разных типов файлов, считывающих значения из файла .ini.

После загрузки значений я пытаюсь l oop по списку кортежей Я создал, который соответствует значениям элементов и, используя jinja, разрешает шаблон и передает его в выходной файл.

.ini пример файла

    [COMMON]
    env = example

    [EXAMPLE]
    value1=abc
    value2=xyz
    value3=123

список кортежей

    d = [('COMMON', 'env'),
         ('EXAMPLE', 'value1'),
         ('EXAMPLE', 'value2'),
         ('EXAMPLE', 'value3')]

Загрузка jinja шаблона

    file_loader = FileSystemLoader(fs)
    e = Environment(loader=file_loader)
    template = e.get_template(tpl)

Итерация списка кортежей

    for i in d:
       template.stream(i[1]=parser.get(i[0], i[1])).dump('output.txt')

Ошибка кода при попытке использовать индекс l oop в качестве значения элемента чего я и пытаюсь достичь. Если элемент соответствует значению единицы в списке, он работает, но тогда мне нужно, чтобы он был в обоих местах ie env=parser.get(i[0], i[1]))

1 Ответ

1 голос
/ 16 июня 2020

Ваша проблема в том, что stream метод получает аргументы в виде ключевого слова (knight в примере) и значения ('that say nih' в примере):

template.stream(knights='that say nih')

Как видите ключевое слово не является Python string.

Чтобы добиться динамической передачи c значений шаблона, вы должны передать их как dict. Также удобнее распаковывать tuple:

  for key, value in d:
      template.stream({
          value: parser.get(key, value)
      }).dump('output.txt')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...