{% set name = "abawaca" %}
{% set version = "1.00" %}
package:
name: {{ name }}
version: {{ version }}
source:
fn: {{ name }}-{{ version }}.tar.gz
url: https://github.com/CK7/abawaca/archive/v{{ version }}.tar.gz
sha256: 57465bb291c3a9af93605ffb11d704324079036205e5ac279601c9e98c467529
build:
number: 0
requirements:
build:
- gcc # [not osx]
- llvm # [osx]
1
A
答えて
1
あなたの入力は、あなたのように、有効なYAMLではありません簡単にチェックすることができます。 here 最初{% %}
構造を展開し、YAMLを処理するか、有効なYAMLにあなたのファイルを作成する必要がありますする必要があります。
これは、マクロシーケンス{% ... %}
がYAMLで特別な意味を持つ文字({
)で始まるjinja2を選択したことの結果の一部です。
あなたはYAMLを変更し、再びそれを記述する必要がある場合は、独自の区切り文字を定義することができますし、YAMLで特別な意味を持っていないように、それらを選択してください。
{% %}
マッピングを持っているだけで、キーと値のペアを持つ必要があり、トップレベルにあるとして、あなたはYAMLのコメントブロックに入れる必要があります。それを達成する1つの方法は、開始を#% %#
として再定義することです(必ずしも終了を変更する必要はありませんが、私は対称性を優先します)。
更新後、ファイルを処理する小さなスクリプトで正しいYAMLを実行し、jinja2が使用する実際の定義を変更するために、jinja2が理解できるものに区切り文字を置き換えるか、環境を調整します。
がdata.yaml
を修正:
#% set name = "abawaca" %#
#% set version = "1.00" %#
package:
name: <{ name }>
version: 42
source:
fn: <{ name }>-<{ version }>.tar.gz
url: https://github.com/CK7/abawaca/archive/v<{ version }>.tar.gz
sha256: 57465bb291c3a9af93605ffb11d704324079036205e5ac279601c9e98c467529
build:
number: 0
requirements:
build:
- gcc # [not osx]
- llvm # [osx]
これは、によって処理することができます与えること
import jinja2
from ruamel import yaml
yaml_file = 'data.yaml'
tmp_file = 'tmp.yaml'
data = yaml.round_trip_load(open(yaml_file))
data['package']['version'] = '<{ version }>'
with open(tmp_file, 'w') as fp:
yaml.round_trip_dump(data, fp)
environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(searchpath='.'),
trim_blocks=True,
block_start_string='#%', block_end_string='%#',
variable_start_string='<{', variable_end_string='}>')
print(environment.get_template(tmp_file).render())
:
package:
name: abawaca
version: 1.00
source:
fn: abawaca-1.00.tar.gz
url: https://github.com/CK7/abawaca/archive/v1.00.tar.gz
sha256: 57465bb291c3a9af93605ffb11d704324079036205e5ac279601c9e98c467529
build:
number: 0
requirements:
build:
- gcc # [not osx]
- llvm # [osx]
をあなたは `ruamel.yaml(免責事項を使用する必要があることに注意してください:私はそのパッケージの作者です)、PyYAMLを使って簡単にこれを実行することはできませんYAMLファイルを読み込んでいます。コメント内のすべてのjinja2はファイルの先頭にあるので、この特定の例でこれを回避することはできますが、一般的にはそうではありません。
関連する問題
- 1. AJAXとJinja2
- 2. はJinja2の、BACKBONE.JSとプログレッシブ・エンハンスメント
- 3. Jinja2の
- 4. PyYAMLとYAMLのload_all
- 5. PyYAMLと、YAMLファイル
- 6. AtomフィードとRSSリーダー
- 7. Nexus SとNFCリーダー
- 8. GPSナビゲータデバイスとRFIDリーダーのプログラミング?
- 9. xcodeのiphoneとipad epubリーダー
- 10. 文書リーダーのViewPagerとPagerAdapter
- 11. Ansible DistributionNotFound Jinja2の
- 12. Jinja2テンプレートのコードカバレッジ
- 13. jinja2.exceptions.TemplateNotFound
- 14. YAMLとXMLの比較
- 15. インタフェースNFCリーダーacr122uとWebアプリケーション
- 16. はJinja2のテンプレートの
- 17. Jinja2のリストのテスト
- 18. python:別のyamlファイルのyamlデータ
- 19. Google App EngineとJinja2の相対URL
- 20. Jinja2のテンプレートは、文
- 21. Jinja2のフレーム変数
- 22. Jinja2テンプレート内のサブストリング
- 23. Jinja2テンプレートのANSIエスケープシーケンス
- 24. Jinja2テンプレートの整頓
- 25. Jinja2の:forループ文
- 26. bokehのJinja2変数
- 27. RSSリーダーのCaptchas?
- 28. ランドスケープモードのzxingリーダー
- 29. yamlの解析方法は? (yaml-cpp)
- 30. YAML未解決の外部シンボル(YAML-CPP)
私は完全な作業例で私の答えを更新しました。申し訳ありませんが、これに戻るにはとても時間がかかりました。 – Anthon