Frage

Ich habe einige Links auf einer HTML-Seite wie, zur Zeit ich mit ihnen als so

<p> <a href="/cases/{{case.id}}/case_rate/-">rate down</a>

und hat einen url.py Eintrag:

 (r'^cases/(?P<case_id>\d+)/case_rate/(?P<oper>.)$', 'mysite.cases.views.case_rate'),

dann habe ich eine View-Funktion, die die Logik behandelt und trifft auf die DB, dann tut dies:

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))

Ich ihm ein besserer Weg, dies zu tun? Ich kann sehen, wie dies in Ordnung sein würde, weil es den Bildschirm muss neu zeichnet die neue Bewertung zeigen ...

War es hilfreich?

Lösung

Der typische Weg, dies zu handhaben ist mit einem Ajax-Request.

Statt eines Links, setzen Sie einen JavaScript-Handler, die eine Ansicht aufruft, wich die DB aktualisiert und gibt eine json / xml-Objekt mit dem neuen Rating für den Artikel. Dann wieder eine Javascript Griff bekommt diese Antwort und aktualisiert die Bewertungszahl auf dem Bildschirm, ohne Neuladen der Seite.

Im Idealfall werden Sie beiden Versionen behalten: plain html (die Sie zur Zeit haben) und die Ajax ein. Die Ajax kann man nach dem Laden der Seite auf das Element anhängen, also, wenn Sie Javascript nicht verfügbar ist, werden Sie noch eine Arbeitsstelle haben.

Dann in Bezug auf Organisation, können Sie einen „Ajax“ Parameter auf Ihrer Ansicht haben. Der Blick sollte den db entsprechend aktualisieren, und wenn es ein Ajax-Aufruf ist, kehrt die json / xml Antwort, andernfalls die neue Seite zurückzukehren. Auf diese Weise können die Logik halten kann (Abrufen des Objekts, die db Aktualisierung) an einem Ort.

Andere Tipps

Wenn Sie sich fragen, ob case_rate noch in der views.py gegeben gehen sollte, dass es eine Umleitung zurückgibt, anstatt Inhalte, die Antwort ja ist, da case_rate eine Anfrage ist der Umgang mit und eine Antwort zurück.

Aber eine Situation betrachtet, in dem Sie in views.py zwei Ansichtsfunktionen hatte, dass einige doppelten Code hatte, und Sie wählte diesen doppelten Code in eine andere Funktion Faktor, der sowohl tat nicht Anforderung nehmen und eine Antwort zurück. Wäre die faire Spiel in views.py zu verlassen? Sicher, wenn es an anderer Stelle bewegen würde den Code schwerer lesbar machen. Oder Sie wählen, um es an anderer Stelle zu setzen. Es ist wirklich Ihren Anruf basierend auf Ihren Sinn für Geschmack.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top