Question

J'ai quelques liens sur une page html comme, actuellement je les manipule comme si

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

et une entrée url.py:

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

alors j'ai une fonction d'affichage qui gère la logique et frappe la DB, fait alors ceci:

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

Je est là une meilleure façon de le faire? Je peux voir comment ce serait OK car il ne redessiner l'écran pour afficher la nouvelle note ...

Était-ce utile?

La solution

La façon typique de gérer cela est avec une demande ajax.

Au lieu d'un lien, vous mettez un gestionnaire javascript qui appelle une vue, Wich met à jour le db, et retourne un JSON / objet xml avec la nouvelle note de l'élément. Ensuite, une autre poignée javascript reçoit cette réponse et met à jour le numéro de note à l'écran, sans recharger la page.

Idéalement, vous garderez les deux versions: la version HTML brut (celui que vous avez actuellement) et une ajax. Le ajax on peut être attacher à l'élément après chargement de la page, donc si javascript est pas disponible, vous aurez encore un site de travail.

Alors, en ce qui concerne l'organisation, vous pouvez avoir un paramètre « ajax » sur votre point de vue. La vue doit mettre à jour le db en conséquence, et si elle est un appel ajax, renvoie la réponse JSON / XML, sinon, retourner la nouvelle page. De cette façon, vous pouvez garder la logique (aller chercher l'objet, la mise à jour du db) sur un seul endroit.

Autres conseils

Si vous vous demandez si case_rate devrait aller encore dans le views.py étant donné qu'il renvoie une redirection plutôt que de fournir le contenu, la réponse est oui, puisque case_rate gère une demande et renvoyer une réponse.

Mais considérez une situation où vous avez eu deux fonctions en vue views.py qui avaient un code en double, et vous avez choisi de tenir ce code en double dans une autre fonction qui n'a pas à la fois prendre la demande et renvoyer une réponse. Serait-ce jeu juste de laisser dans views.py? Bien sûr, si le déplacer serait d'ailleurs rendre plus difficile à lire le code. Ou vous pouvez choisir de le mettre ailleurs. Il est vraiment votre appel basé sur votre sens du goût.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top