Domanda

Ho alcuni link in una pagina HTML, come,, attualmente ho gestirli come modo

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

e hanno una voce url.py:

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

quindi ho una funzione di visualizzazione che gestisce la logica e colpisce il DB, allora fa questo:

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

I del Esiste un modo migliore per fare questo? Posso vedere come questo sarebbe OK perché deve ridisegnare lo schermo per visualizzare il nuovo rating ...

È stato utile?

Soluzione

Il modo tipico per gestire questa situazione è con una richiesta AJAX.

Al posto di un link, si mette un gestore javascript che chiama una vista, wich aggiorna il db, e restituisce un oggetto JSON / XML con il nuovo rating per la voce. Poi un altro manico javascript riceve la risposta e aggiorna il numero di valutazione sullo schermo, senza ricaricare la pagina.

Idealmente, potrai mantenere entrambe le versioni: semplice HTML (quello attualmente si dispone) e quello ajax. L'Ajax si può essere allegare al elemento dopo caricamento della pagina, quindi se javascript non è disponibile, ci si può comunque avere un sito di lavoro.

Poi, per quanto riguarda l'organizzazione, si può avere un parametro di "ajax" sul vostro punto di vista. La vista dovrebbe aggiornare il db di conseguenza, e se si tratta di una chiamata AJAX, restituire la risposta JSON / XML, in caso contrario, restituire la nuova pagina. In questo modo è possibile mantenere la logica (andare a prendere l'oggetto, l'aggiornamento del db) in un unico luogo.

Altri suggerimenti

Se stai chiedendo se case_rate deve ancora andare in views.py dato che restituisce un reindirizzamento piuttosto che fornire contenuti, la risposta è affermativa, in quanto case_rate sta gestendo una richiesta e la restituzione di una risposta.

Ma si consideri una situazione in cui si doveva due funzioni in vista views.py che hanno avuto un certo codice duplicato, e si è scelto di fattore che il codice duplicato in un'altra funzione che non ha fatto sia prendere richiesta e restituire una risposta. Vorrei che sia giusto gioco di lasciare in views.py? Certo, se spostandolo altrove sarebbe rendere il codice più difficile da leggere. Oppure si può scegliere di metterlo altrove. E 'davvero la chiamata basata sul senso del gusto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top