我有一个对象列表我试图连续几个月,我的问题不是每个对象都有每个月的日期。
我试过这样:
{% regroup object_list|dictsort:"store.id" by store as store_list %}
<ul>
{% for store in store_list %}
<li>{{ store.grouper }}
{% regroup store.list|dictsort:"product" by product as product_list %}
<ul>
{% for product in product_list %}
<li>{{ product.grouper }}
<ul>
{% for item in product.list|dictsort:"date" %}
<li>{{ item.price }} - {{ item.date|date }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
这给了我:
我希望它显示如下:
如果有可能的话,任何人都会知道吗?
答案 0 :(得分:1)
您可以使用模板过滤器解决问题:
为过滤器创建一个文件(即<YOUR_APP>/templatetags/<YOUR_FILTERS>.py
)并添加以下代码:
from django.template import Library
from django.utils.datetime_safe import datetime
register = Library()
@register.filter
def full_month_price_list(value):
month_list = [[datetime(2013, i, 1)] for i in xrange(1, 13)]
for item in value:
month_list[item.date.month - 1].append(item)
return month_list
此过滤器获取具有日期属性的项目列表,并返回包含12个元素列表的列表:日期和项目
在模板代码中加载过滤器({% load <YOUR_FILTERS> %}
)并更改此内容:
<ul>
{% for item in product.list|dictsort:"date" %}
<li>{{ item.price }} - {{ item.date|date }}</li>
{% endfor %}
</ul>
by(更新格式为您在评论中提出的格式):
<table>
{% for item in product.list|full_month_price_list %}
<tr>
<td>{{ item.0|date:"b. j, Y" }}</td>
<td>{{ item.1.price|default:"MISSING VALUE" }}</td>
</tr>
{% endfor %}
</table>
请注意,您可以访问产品item.1.date
,item.1.price
,item.1.pk
等的任何属性。
以您的django应用名称<YOUR_APP>
替换您要用于过滤器文件的名称<YOUR_FILTERS>
。
请注意,目录__init__.py
中需要名为<YOUR_APP>/templatetags/
的文件。
有关django docs中自定义过滤器的详情。