这应该很简单,但是我只是试着想着如何解决它而粉碎我的头发!
我的网站侧面有一个导航菜单,用于挑选产品。它的格式如下:
简单来说,产品属于列表,属于类别,属于类别组。它们都是一对多的关系。
我需要将这个从我的视图传递到我的模板,这样我就可以在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新手,所以还在学习绳索。
答案 0 :(得分:5)
当我看到层次结构或树结构时,我通常会转向mptt,一个修改过的预订遍历树。谷歌“django mptt”,你会发现大量关于使用django-mptt包的教程。
答案 1 :(得分:0)
这样的事情会起作用:
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>
答案 2 :(得分:0)
两个类别组的简单示例。
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...]