【问题标题】:django group by in templatedjango 在模板中分组
【发布时间】:2015-02-12 22:10:37
【问题描述】:

我正在尝试为我的用户记录记录更改的历史记录。 我有一个历史模型:

class History(models.Model):
concerning      = models.ForeignKey(User)
field           = models.CharField(max_length=30)
creation_date   = models.DateTimeField(auto_now_add=True)
author          = models.ForeignKey(User, related_name='autor_history_info')
action          = models.CharField(max_length=30)
new_value       = models.CharField(max_length=1000)

和历史视图:

def get_history(request):
changes = History.objects.all().filter(concerning=request.user).order_by('field')

return render(request, "get_history.html", {"changes" : changes)

和一个历史模板:

{%for change in changes %}
  <h1>{{change.field}} </h1>
  {{change.creation_date}} 
  {{change.author}}
  {{change.action}}
  to
  {{change.new_value}}
  <br>
{% endfor %}

不幸的是,我找不到创建组的好方法,这将限制显示该字段一次,然后进行下面的所有更改。如何使一个小组这样做?

【问题讨论】:

  • 请说明您希望按哪个字段分组?或以您希望的方式发布一些示例输出。
  • 这正是regroup 内置过滤器所适用的情况。查看文档,它虽然复杂,但效果很好:docs.djangoproject.com/en/1.7/ref/templates/builtins/#regroup。或者ifchanged 会做你需要的一切,那个更简单。

标签: django group-by


【解决方案1】:

使用{% ifchanged %}模板标签:

{% for change in changes %}

  {% ifchanged %}<h1>{{change.field}}</h1>{% endifchanged %}

  {{change.creation_date}} 
  {{change.author}}
  {{change.action}}
  to
  {{change.new_value}}
  <br>

{% endfor %}

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 2010-10-25
    • 2014-10-11
    • 2019-07-06
    • 2022-09-27
    • 1970-01-01
    • 2012-01-21
    • 2013-11-10
    相关资源
    最近更新 更多