我想列出我的模板中的所有專案,但我想列出同一年以下的專案。例如,在 2021 標題下,應列出該年的模型物件。年份標題應該是動態的。我該怎么做?
視圖.py
def press_list(request):
press_contents = PressContent.objects.all().order_by('-date')
context = {
'press_contents': press_contents
}
return render(request, "press_list.html", context)
模型.py
class PressContent(models.Model):
label = models.CharField(max_length=500)
url = models.URLField(max_length=500)
date = models.DateTimeField(blank=True, null=True)
press_list.html
{% for press in press_contents %}
<div class="card" style="width: 18rem; margin:15px">
<div class="card-header">
{{ press.date.year }}
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item"><a href="{{ press.url }}">{{ press.label }}</a></li>
# Other objects from this year should come here.
</ul>
</div>
{% endfor %}
明確:2021
- 物件 1
- 物件 2 2020
- 物件 3
- 物件 4 ... ...
uj5u.com熱心網友回復:
您可以使用{% regroup … by … %}模板標簽 [Django-doc]:
{% regroup press_contents by year as pressitems %}
{% for pressyear in pressitems %}
<div class="card" style="width: 18rem; margin:15px">
<div class="card-header">
{{ pressyear.grouper }}
</div>
<ul class="list-group list-group-flush">
{% for press in pressyear.list %}
<li class="list-group-item"><a href="{{ press.url }}">{{ press.label }}</a></li>
# Other objects from this year should come here.
{% endfor %}
</ul>
</div>
{% endfor %}
uj5u.com熱心網友回復:
如果您有能力將查詢集轉換為物件串列,那么您可以使用內置的模板過濾器重組(我想,我從未使用過它)。
另一種方法是撰寫一個 python 生成器函式并將其傳遞到背景關系中,以便由模板進行迭代。當查詢集包含大量物件時,這避免了資源消耗問題。就像是
def year_grouper():
qs = PressContent.objects.all().order_by('-date')
last_object_year = 1000000000
for obj in qs:
obj.year_changed = ( obj.date.year != last_object_year )
yield obj
last_object_year = obj.date.year
和
{% for obj in year_grouper %}
{% if obj.year_changed %}
... year header, etc.
{% endif %}
... display obj
{% endfor %}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/404794.html
標籤:
