[英]Django hierarchical model list
這應該很簡單,但我只是想思考如何解決就撕碎頭發了!
我網站的下方有一個導航菜單,用於選擇產品。 格式如下:
簡單來說,產品屬於一個列表,該列表屬於一個類別,該列表屬於一個類別組。 它們都是一對多的關系。
我需要以一種可以將嵌套列表以HTML呈現給jquery的方式,將其從視圖傳遞到模板。 就像是:
<ul>
<li>Category Group</li>
<ul>
<li>Category</li>
<ul>
<li>List</li>
<li>List</li>
<li>List</li>
</ul>
<li>Category</li>
<ul>
<li>List</li>
<li>List</li>
<li>List</li>
</ul>
</ul>
<li>Category Group</li>
<ul>
<li>Category</li>
<ul>
<li>List</li>
<li>List</li>
<li>List</li>
</ul>
<li>Category</li>
<ul>
<li>List</li>
<li>List</li>
<li>List</li>
</ul>
</ul>
</ul>
我的問題是創建要傳遞給模板的層次結構列表,以便它可以呈現該列表。 我知道我需要使用Model.FK_set.all()來說出“類別組”中“類別”的列表,但我不知道如何在視圖中創建該列表。發送到模板的適當方式。 有什么幫助嗎? Python新手,因此仍需學習。
當我看到層次結構或樹結構時,通常會轉向mptt,這是一種經過修改的預遍歷樹。 Google“ django mptt”,您會發現大量使用django-mptt軟件包的教程。
這樣的事情會起作用:
from __future__ import with_statement
import os
from django.template import Context, Template
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
menu = {
'food':
{'fruit':
['apple', 'orange'],
'meat':
['beef', 'pork'],
},
'animals':
{'mamals':
['cow', 'bear'],
'reptiles':
['frog', 'newt'],
},
}
with open('template.html', 'r') as infile:
html = infile.read()
t = Template(html)
print t.render(Context({'menu': menu}))
模板:
<html>
<body>
<ul>
{% for name, cat_group in menu.items %}
<li>{{ name }}</li>
<ul>
{% for name, cat in cat_group.items %}
<li>{{ name }}</li>
<ul>
{% for product in cat %}
<li>{{ product }}</li>
{% endfor %}
</ul>
{% endfor %}
</ul>
{% endfor %}
</ul>
</body>
</html>
兩個類別組的簡單示例。
a = [1,2]
b = [3,4,5]
c = [6,7]
d = [8]
item1 = [a,b]
item2 = [c,d]
mygroup = [item1,item2]
在Django中,您將必須使用for循環進行導航:-
{% for items in mygroup %}
// Group Category title here
(% for list in items %}
// Group title here
(% for contents in list %}
// all the unit contents
[...dont forget to close your for loops...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.