Django classe de vue générique de redirection
De considérer les éléments suivants:
urls.py:
urlpatterns = patterns('',
('^test/$', ClassView.as_view()),
)
views.py:
class ClassView(View):
def get(self, request):
return HttpResponse("test")
def post(self, request):
# do something
return redirect(ClassView.get(request)) # What should I do to redirect to a class here without specifying the path?
Je veux rediriger vers ClassView de la fonction get (/test/), mais quand j'essaie de le ci-dessus j'obtiens:
NoReverseMatch at /test/
Donc évidemment trouve l'URL, mais dit qu'il n'y a pas de match?
OriginalL'auteur olofom | 2014-01-28
Vous devez vous connecter pour publier un commentaire.
Vous devriez juste le nom de votre urlpattern et de redirection, qui serait le plus Django-ey façon de le faire.
Il n'est pas documenté (donc pas garanti pour fonctionner dans les futures versions de Django), mais le
redirect
méthode raccourci peut prendre un point de vue de la fonction, de sorte que vous pouvez presque neredirect(ClassView.as_view())
...je dis presque parce que ce n'est pas réellement au travail chaque fois que vous appelezas_view()
vous obtenez un nouveau vue de la fonction de rendu, doncredirect
ne reconnaît pas que la même vue que dans votre urlconf.Donc à faire ce que vous voulez, vous devez mettre à jour votre urlconf comme suit:
Et dans votre views.py
Mais je pense que vous devriez faire dans l'autre sens:
.
post
méthode, puis d'une façon plus propre de le faire est de déclarerClassView
avec un mixin commedjango.views.generic.edit.FormMixin
puis ajouter lesuccess_url
déclaration du membre de classe,success_url = reverse_lazy('test')
. Ensuite, vous pouvez omettre la déclaration depost
.oui, bon point! ...bien que les OP n'ont que
# do something
commentaire dans lepost
méthode qui suggère peut-être quelques trucs qui se passaitOriginalL'auteur Anentropic
Peut être vous devez définir le nom de votre urlpattern et de redirection de nom?
Comme déjà répondu par @anentropic, il est possible de rediriger vers pré-autre vue de classe. Mais si vous l'utilisez ailleurs dans votre projet, vous rediriger peut être rompu parce que Django n'a pas connu qui urlpattern est droit.
OriginalL'auteur oxyum
Cela vous redirigera vers la même URL que votre
post()
, puis gérés par votreget()
.OriginalL'auteur zzheng
Essayer retour
self.get()
. Je n'ai pas fait de test. Mais comme son un code python, il doit travailler. Utilisez cette option si vous souhaitez uniquement pour exécuter les instructions. Ce ne sera pas de retour tout HTTP 302 statut, je pense.OriginalL'auteur Shrinath Shenoy