import json, sys from jinja2 import Environment, BaseLoader with open('dep-template.md.j2') as f: template_text = f.read() with open('test-manifest.json') as f: manifest_data = json.load(f) def from_json(val): return json.loads(val) if isinstance(val, str) else val env = Environment(loader=BaseLoader(), autoescape=False) env.filters['from_json'] = from_json template = env.from_string(template_text) result = template.render(manifest=json.dumps(manifest_data)) sys.stdout.write(result)