11 Stimmen

Wie kann man Django-Nachrichten im StackOverflow-Stil machen?

Ich möchte das Django Messages-Modul verwenden, würde aber gerne meine Nachrichten so lange behalten, bis der Benutzer auf ein X neben der Nachricht klickt, anstatt dass die Nachrichten verschwinden, sobald der Benutzer die Seite neu lädt.

Ich stehe vor zwei Problemen: Wie kann ich den Nachrichten-Context-Prozessor nicht die Nachrichten löschen lassen, sobald sie abgerufen wurden? Wie kann ich später die Nachricht aus der Datenbank explizit löschen, sobald der Benutzer auf die Schaltfläche "entfernen" klickt (was einen Ajax-Aufruf auslöst)?

Vielen Dank!

8voto

Guillaume Esquevin Punkte 2942

In deinem Fall wird django.contrib.messages dir nicht weiterhelfen. Es handelt sich um ein Nachrichtensystem, das vom RoR-Blitzsystem inspiriert ist, in dem Nachrichten nicht dauerhaft gespeichert werden sollen.

Du solltest dein eigenes Nachrichtensystem erstellen (vielleicht django-persistent-messages?), das Nachrichten für registrierte Benutzer in der Datenbank speichert.

  • Es ist eine ziemlich einfache Aufgabe zu implementieren
  • ein Modell mit einem Fremdschlüssel auf Benutzer
  • einen Kontextprozessor, um die Nachrichten in den Templates verfügbar zu haben
  • eine Ansicht, um eine Nachricht zu entgegen
  • vielleicht eine Hilfsfunktion, um die Nachrichten zu erstellen

Vergiss nicht, es anderen zur Verfügung zu stellen, wenn du dies tust =)

7voto

viam0Zah Punkte 25173

Seit 1.2 hat Django ein neues Nachrichten-Framework - django.contrib.messages -, das jetzt vollständig vom Modul auth getrennt ist und wesentlich mehr Funktionalität bietet. Es bietet beispielsweise eine grundlegende Möglichkeit, mit dem Ablauf von Nachrichten umzugehen.

Sie können sich auch die django-cnotes-Anwendung ansehen, die ein einfaches benachrichtigungssystem für Benutzer basierend auf Cookies bietet. Wenn Sie die Konstante CNOTES_AUTO_CLEAR auf False setzen, wird das automatische Löschen der Notizen verhindert.

Und es gibt django-notices, yet another replacement for the built-in message notification system. Es macht keine Magie, bietet aber eine elegante und einfache API.

4voto

Herman Schaaf Punkte 42805

Seit Ende 2010 gibt es die Bibliothek django-persistent-messages genau für dieses Ziel. Es ist ziemlich gut dokumentiert und funktioniert gut, um ein Stack Overflow-ähnliches Nachrichtensystem zu erstellen.

Es integriert sich auch in das eingebaute Django-Nachrichtensystem, sodass die Codeänderungen relativ gering sind und Sie das Originalsystem weiterhin für Nachrichten verwenden können, die nicht persistent sein müssen.

2voto

Dave W. Smith Punkte 23003

Django-Nachrichten mögen wie ein guter Ausgangspunkt erscheinen, erfordern aber Verrenkungen, um dorthin zu gelangen, wo Sie hinwollen, und ich würde nicht darauf vertrauen, dass zukünftige Versionen von Django Ihre Hacks nicht brechen würden.

Das Implementieren Ihres eigenen UserMessage-Modells wird Ihnen wahrscheinlich auf lange Sicht besser dienen. Dadurch haben Sie vollständige, eindeutige Kontrolle über den Nachrichten-Lebenszyklus. Es könnte auch eine schöne wiederverwendbare App ergeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X