Как отобразить объекты по дням в шаблоне Django?
На данный момент у меня есть несколько журналов в базе данных, и я хочу отобразить их по дате в шаблоне Django. Как мне это сделать?
Вот как выглядит моя текущая система...
Вот как я хочу, чтобы они выглядели.
JUNE 20, 2022
-------------
Nice songs! I'm listening to Massive Attack right now - 03:06 AM
JUNE 19, 2022
-------------
Just completed a sketch of the LOG IT! - 21:48 PM
I'm watching a movie right now. It's called Black Swan - 21:30 PM
Just had a pizza from Pagliacci! - 21:25 PM
models.py
class Logs(models.Model):
log = models.CharField(max_length=100)
created = models.DateTimeField(auto_now=False, auto_now_add=True)
views.py
class ViewLogs(ListView):
template_name = 'logs_list.html'
model = Logs
form_class = LogForm
def get_logs(self):
logs = Logs.objects.all().order_by('-created')
return logs
def get_form(self):
form = LogForm()
return form
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['query'] = self.request.GET.get('q', None)
form = self.get_form()
logs = self.get_logs()
context['form'] = form
context['logs'] = logs
return context
logs_list.html
{% for log in logs %}
<div class="row">
<div class="col-lg-12">
<p style="color:black;max-width:1000px;"> {{ log.log | safe}} </p>
<small style="color:gray;" class="float-right"> {{ log.created | date:"F d, o - H:i A" | upper }} </small>
</div>
</div>
{% endfor %}
Перегруппировка - ваш друг в этом случае. Она позволяет объединять вещи по общим атрибутам, включая атрибуты, которые были отфильтрованы фильтрами шаблонов! Подробнее см. в docs. Что-то вроде:
{% regroup logs by created|date:"F d, Y"|upper as log_days %}
{% for day in log_days %}
<div class="log-day">
<h2 class="day-heading">{{ day.grouper }}</h2>
{% for log in day.list %}
<p>{{ log.log|safe }} - {{ log.created|date:" H:i A"|upper }}<p>
{% endfor %}
</div>
{% endfor %}