簡體   English   中英

Django分層模型列表

[英]Django hierarchical model list

這應該很簡單,但我只是想思考如何解決就撕碎頭發了!

我網站的下方有一個導航菜單,用於選擇產品。 格式如下:

  • 每個產品都屬於一個“列表”(單擊列表會向您發送一個包含產品列表的頁面)。
  • 每個列表都屬於一個“類別”(單擊該類別時,jquery會在單擊時使用jquery展開其下方的列表,但這並不重要)
  • 每個類別都屬於一個“類別組”,該類別根據您要處理的業務領域將類別分為不同的組)

簡單來說,產品屬於一個列表,該列表屬於一個類別,該列表屬於一個類別組。 它們都是一對多的關系。

我需要以一種可以將嵌套列表以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM