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> 
  • Django {% url%} bei URLs mit Parametern wie: url (r '^ foo / <Parameter> / $', include (some.urls))
  • Warum ist Django blocktrans einen Platz und nicht einen anderen?
  • Gibt es eine HAML-Implementierung für Python und Django
  • Kann nicht Unicode-String in django-Vorlage verwenden
  • Django settings.py Variablen in Vorlagen
  • Wie bekomme ich checkbox Wert in django?
  • Ist es möglich, ein benutzerdefiniertes Template-Tag in Base zu laden und es in ausgedehnten Vorlagen zu verwenden
  • Django Formset Management-Formular-Validierungsfehler
  • Django: Wie kann man FormView mit dynamischen (nicht modellierten) Daten vorfüllen?
  • Wie füge ich einen Link von der Django-Admin-Seite eines Objekts zur Admin-Seite eines verwandten Objekts hinzu?
  • Django: Kein Modul namens context_processors, Basis-URL
  • Python ist die beste Programmiersprache der Welt.