Jinja2 и Json
у меня есть, например, файл JSON
{
"Google":{
"Web":"www.web.de",
"Apps":{
"Drive": "DriveLink",
"Dropbox": "DropboxLink"
},
"Google Main":"http://mail.google.com",
"G+":"http://plus.google.com"
},
"Social":{
"Facebook":"http://www.facebook.de",
"G+":"https://plus.google.com",
"Xing":"http://www.xing.de",
"LinkedIn":"http://www.linkedin.com",
"Tumblr":"http://www.tumblr.com"
},
"Fun":{
"Reddit":"http://www.reddit.com"
}
}
Как вы можете видеть, у меня есть в разделе Google вложенный раздел с именем Apps
С CherryPy я передаю этот объект JSON следующим образом с именем linksList:
@cherrypy.expose
def index(self):
linksFile = open('links.json', 'r')
linksList = json.load(linksFile)
template = jinjaEnv.get_template('index.html')
return template.render(linksList=linksList)
Я хочу сделать следующее:
- Google
- Web (как ссылка)
- Google Главная
- G+
- приложения
- диск
- в Dropbox
- социальные
- G+
и так далее
то, что я не понимаю, это сделать, это сделать это вложенные объекты, такие как "приложения" рекурсивно
1 ответов
на документация гласит:
можно использовать циклы рекурсивно. Это полезно, если вы работа с рекурсивными данными, такими как sitemaps. Рекурсивное использование циклов вы в основном должны добавить рекурсивный модификатор в цикл определение и вызов переменной цикла с новой iterable, где вы хочу повторить.
в вашем случае это будет достигнуто следующим образом:
<ul>
{% for key, value in linksList.items() recursive %}
<li>
{% if value is string %}
<a href="{{ value }}">{{ key }}</a>
{% else %}
{{ key }}
<ul>{{ loop(value.items()) }}</ul>
{% endif %}
</li>
{% endfor %}
</ul>