在Django模板中按类别列出产品

时间:2009-08-21 12:46:10

标签: django django-templates

生成HTML的最佳方法是什么?Django模板中的每个类别和该类别下的产品都有标题?

我玩弄了一本传递字典或有序列表的想法......

3 个答案:

答案 0 :(得分:8)

查看重新组合模板过滤器

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#regroup

有了它,你可以这样做:

{% regroup products by category as products_by_category %}
{% for c in products_by_category %}
  <h1>{{c.grouper}}</h1>
  <ul>
    {% for p in c.list %}
      <li>{{p.name}}</li>
    {% endfor %}
  </ul>
{% endfor %}

答案 1 :(得分:4)

除了@Wade建议您还可以向Category模型添加方法以返回其拥有的产品。

实施例..

class Category:
... 
...  
    def get_products(self):
        return Product.objects.filter(category=self)

然后在模板中你可以..

{% for category in categories %} # assuming categories is passed from the view.
    {% for product in category.get_products %}
...

答案 2 :(得分:1)

在视图代码

中使用了排序列表
sorted(dom_obj.objects.all(), key=lambda d: d.sort_key)

然后使用过滤器标签

{% ifchanged %}<h1>{{ prod.cat }}</h1>{% endifchanged %}