3 votes

Django HttpResponseRedirect et reverse()

Situation en bref. Pour une raison quelconque, la méthode reverse() ne fonctionne pas.

dans PROJECT urls.py

url(r'^enrollment/', include('project.enrollment.urls')),

dans APP urls.py

url(r'^thanks/$', 'enrollment.views.thanks', name='enroll_thanks'),

et dans views.py

from django.core.urlresolvers import reverse
def thanks(request):
    return render_to_response('enrollment/thanks.html', {}, context_instance=RequestContext(request))

def enroll(request):
    ''' some code for handling the form'''
    return HttpResponseRedirect(reverse('enrollment.views.thanks'))

Cette inversion provoque l'erreur suivante : Impossible d'importer project.views. L'erreur était : Aucun module nommé views

dans le fichier ../django/core/urlresolvers.py dans _get_callback, ligne 167

Une idée de la raison pour laquelle cela ne fonctionne pas ? La prochaine étape est d'appeler le thanks-view avec un paramètre, mais cela devrait être facile après que cette configuration fonctionne. Devrait-il y avoir quelque chose de plus à importer dans views.py ?

5voto

philofinfinitejest Points 1646

Dans les documents relatifs à inverser : "Dans le cadre de la détermination des noms d'URL correspondant à des motifs, la fonction reverse() doit importer tous vos fichiers URLconf et examiner le nom de chaque vue. Cela implique l'importation de chaque fonction de vue. S'il y a des erreurs lors de l'importation de l'une de vos fonctions de vue, reverse() lèvera une erreur, même si cette fonction de vue n'est pas celle que vous essayez d'inverser."

Est-ce que l'une de vos urls fait référence à project.views. ... ?

-1voto

istruble Points 5686

Je ne suis pas trop sûr de la disposition de votre module, mais d'après votre ligne include() dans urls.py, il semble que vous devriez ajouter "project." à l'argument de votre appel reverse() également.

reverse('project.enrollment.views.thanks')

Ou bien vous avez peut-être un bug dans la vue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X