如何按日期对Django中的输出进行分组?

时间:2016-06-12 05:08:19

标签: python django django-templates django-views

我需要在我的模板中显示这样的内容:

6月11日

  • 数据1
  • 数据2

6月10日

  • 数据3
  • 数据4

我的观点:

def Inicio(request):
    g = Gastos.objects.all()
    return render(request, 'principal/gastos.html', {'g': g})

我的模特:

class Gastos(models.Model):
    ...
    fecha = models.DateTimeField(auto_now_add=True, auto_now=False)
    ...

我需要按字段分组" fecha"来自Model,我不知道该怎么做。

修改 我使用了collections.defaultdict:

我的观点:

def Inicio(request):
    g = Gastos.objects.all()
    lista = defaultdict(list)
    for gasto in g:
        lista['%s %s' %(gasto.fecha.day, gasto.fecha.strftime("%B"))].append(gasto)
    return render(request, 'principal/gastos.html', {'lista': lista})

如果我打印" lista"在python shell中:

defaultdict(<type 'list'>, {"12 June": [<Gastos: Gasolina>, <Gastos: mandado>], "13 June": [<Gastos: Ropa>]})

我得到了我想要的,但问题在于模板,我无法迭代每个对象。

我的模板:

{% for dia in lista %}
    <h3>{{dia}}</h3>
    {% for g in dia.items %}
        <li>{{g.producto}}</li>
    {% endfor %}
{% endfor %}

结果是html(没有数据):

6月12日

6月13日

1 个答案:

答案 0 :(得分:0)

lista是一个字典,因此我们可以自由地在字典上应用items函数来获取键值对。所以代码应该是,

{% for key, value in lista.items %}
    <h3>{{key}}</h3>
    {% for g in value %}
        <li>{{g.producto}}</li>
    {% endfor %}
{% endfor %}