Wie kann ich das "Datum empfangen" nur einmal ausdrucken?

Ich versuche, Nachrichten zu gruppieren, die heute empfangen wurden, erhielten gestern, ect. Um zu klären, versuche ich, einen einzigen Header zu haben, der "Heute" sagt und dann diese Nachrichten darunter auflistet. Ich versuche nicht, "Heute" zusammen mit jeder Nachricht zu drucken, die an diesem Tag empfangen wurde (was derzeit geschieht).

Ich habe derzeit die TODAY- und YESTERDAY-Header in meinem für Loop, also verstehe ich das ist der Grund dafür, dass es diese Header für jede Mail-Nachricht druckt, aber wie bereits erwähnt, möchte ich sie nur einmal ausdrucken. Meine Frage ist, wie kann ich dies mit dem unten stehenden Code erreichen? Muss ich für jeden Zeitraum (heute, gestern, letzte Woche, ect) separat für Loops machen, oder gibt es einen effizienteren Weg, dies zu tun?

{% for message in messages %} {% if message.date - current.date < 24 hours %} TODAY Sent by: {{ message.sender }} {{ message.body }} {% elif message.date - current.date > 24 hours and message.date - current.date < 48 hours %} YESTERDAY Sent by: {{ message.sender }} {{ message.body } {% endif %} {% endfor %} 

2 Solutions collect form web for “Wie kann ich das "Datum empfangen" nur einmal ausdrucken?”

{{forloop.first}} kannst du {{forloop.first}} . So kann Ihr Code aktualisiert werden

 {% for message in messages %} {% if message.date - current.date < 24 hours %} {% if forloop.first %} TODAY {% endif %} {% elif message.date - current.date > 24 hours and message.date - current.date < 48 hours %} {% if forloop.first %} YESTERDAY {% endif %} {% endif %} Sent by: {{ message.sender }} {{ message.body }} {% endfor %} 

Ich versuche gruppieren Sie Nachrichten, die heute empfangen wurden, erhielten gestern

@Rohan gab Ihnen eine Antwort, aber es wird die Prüfung auf jeder Schleife laufen, obwohl Sie nur einmal ausdrucken die Zeichenfolge einmal.

Ein besserer Ansatz wäre, Ihre Nachrichten zu organisieren und sie durch den Datumsunterschied zu bestellen.

Der beste Weg, dies zu tun ist, um die Nachrichten in der Ansicht zu gruppieren, bevor sie sie an die Vorlage senden, wie folgt:

 from collections import defaultdict from django.utils.timesince import timesince # This will give us nice human # friendly date offsets def some_view(request): messages = Message.objects.order_by('date') grouped_messaged = defaultdict(list) for message in messages: grouped_messages[timesince(message.date)].append(message) return render(request, 'template.html', {'all_messages': messages}) 

Jetzt ist deine Vorlage viel einfacher:

 <ul> {% for header,messages in all_messages.items %} <li>{{ header }} <ul> {% for message in messages %} <li>{{ message.sender }} - {{ message.body }}</li> {% endfor %} </ul></li> {% endfor %} </ul> 
  • Wie man durch Wörterbuch in einem Wörterbuch in django Vorlage iterieren?
  • Bekomme die Liste der Checkbox Post in django Ansichten
  • Vergleich von js undtemplate tags
  • Django - Zugriff auf den RequestContext aus einem benutzerdefinierten Filter
  • Django Float-Format erhalten nur Ziffern nach Gleitkomma
  • Zugriff auf das multidimensionale Wörterbuch auf Django-Vorlage
  • Eine Liste von Fehlern in einem Django-Formular erhalten
  • ManagementForm-Daten fehlen oder wurden manipuliert
  • Referenzliste nach Index innerhalb der Django-Vorlage?
  • Django: Kein Modul namens context_processors, Basis-URL
  • Django statische Dateien werden nicht mit Standardeinstellung geladen
  • Python ist die beste Programmiersprache der Welt.