I am using Flask/Python application and facing issue in rendering namedtuple type data in jinja template.
I'm using versions
- Python 3.6
- Flask 1.1.2
- Jinja2 3.0.1
Below is my working sample code:
from collections import namedtuple
from flask import Flask, render_template, render_template_string
# ....
app = Flask(__name__)
Category = namedtuple(
'Category',
['name', 'priority', 'menus', 'has_next_level']
)
MenuItem = namedtuple(
'MenuItem',
['title', 'url', 'target', 'id', 'parent_id', 'object_type']
)
# --- Sample input value render_template()
menu_content = {
50: {
'AGENTS': Category(
name='AGENTS',
priority=1,
menus=[
MenuItem(
title='Agent2',
url='/monitoring/dashboard/6/agent/2',
target=None,
id=2,
parent_id=None,
object_type='agent'
),
MenuItem(
title='Postgres Enterprise Manager Host',
url='/monitoring/dashboard/6/agent/1',
target=None,
id=1,
parent_id=None,
object_type='agent'
)],
has_next_level=True
)
}
}
output = None
with app.app_context():
output = render_template_string(
'{{ menu_content|tojson|safe }}',
menu_content=menu_content
)
print(output)
Output, I am getting:
{"50": {"AGENTS": ["AGENTS", 1, [["Agent2", "/monitoring/dashboard/6/agent/2", null, 2, null, "agent"], ["Postgres Enterprise Manager Host", "/monitoring/dashboard/6/agent/1", null, 1, null, "agent"]], true]}
Expected output:
{"50": {"AGENTS": {"has_next_level": true, "menus": [{"id": 2, "object_type": "agent", "parent_id": null, "target": null, "title": "Agent2", "url": "/monitoring/dashboard/6/agent/2"}, {"id": 1, "object_type": "agent", "parent_id": null, "target": null, "title": "Postgres Enterprise Manager Host", "url": "/monitoring/dashboard/6/agent/1"}]}
Am I missing anything here?