【问题标题】:Django hierarchical model listDjango分层模型列表
【发布时间】:2011-11-18 02:57:12
【问题描述】:

这应该很简单,但我正在撕碎我的头发,只是想想想如何解决它!

我的网站下方有一个导航菜单,用于挑选产品。它的格式如下:

  • 每个产品都属于一个“列表”(单击列表会向您发送一个包含产品列表的页面)。
  • 每个列表都属于一个“类别”(单击该类别时,单击该类别时会使用 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 新手,所以仍在学习中。

【问题讨论】:

    标签: python django model hierarchical-data nested-lists


    【解决方案1】:

    当我看到层次结构或树结构时,我通常会求助于 mptt,一种经过修改的前序遍历树。谷歌“django mptt”,你会发现大量使用django-mptt包的教程。

    【讨论】:

      【解决方案2】:

      这样的事情会起作用:

      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>
      

      【讨论】:

        【解决方案3】:

        两个类别组的简单示例。

        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...]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-19
          • 2015-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-03
          相关资源
          最近更新 更多