0
1

More than 3 years have passed since last update.

【Python】jinja2を使ってtemplateを読み込みたい

Last updated at Posted at 2021-03-08

はじめに

<バージョン>
python: 3.7.9

 以下のような、jinja2テンプレートとymlを組み合わせるにはどうすればいいでしょうか?
参考記事(1つ目)のように、ymlを引数としてpythonに渡すコードは見つかったのですが、
pythonコードの中で完結しているものがなかったので作ってみました。

test.j2
var1: {{ var1 }}
var2: {{ var2 }}
test.yml
---
var1: test1
var2: test2

1. サンプルコード

 コードにあるように「with open」を使えば、ymlを引数としてpythonに渡す必要が
無くなるようです。

template.py
#!/usr/bin/env python3
# coding: utf-8
import sys, yaml, jinja2

# define variable
base_dir = '/home/ec2-user/test'
j2_dir   = base_dir + '/j2'
yml_dir  = base_dir + '/yml'

# import j2 template
_loader      = jinja2.FileSystemLoader(j2_dir, encoding='utf-8')
_environment = jinja2.Environment(loader=_loader)
_template    = _environment.get_template("test.j2")

# import yaml and render
with open(yml_dir + '/' + 'test.yml') as import_yml:
  sys.stdout.write(_template.render(yaml.load(import_yml)))

2. ディレクトリ構成

 ファイルは以下の構成にしてください。

.
├── template.py
├── j2
│   └── test.j2
└── yml
    └── test.yml

3. 実行結果

 想定通り、jinja2を使ってymlとtemplateを組み合わせることが出来ました。

出力
[ec2-user@ip-<ip-addr> test]$ python template.py
var1: test1
var2: test2

参考資料

PythonでYAMLを読み込んでJinja2で整形する
【PyYAML VS ruamel.yaml】PythonからYAMLファイルを触ってみた

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1