django redirect() avec des paramètres
Il y a eu plusieurs questions similaires posées déjà, mais je n'arrivais pas à trouver la réponse à mon problème, après avoir passé loong heures.
Dans le code ci-dessous lorsque j'rediriger vers "anotherView" à partir de "mavue" avec le paramètre "nom d'utilisateur", il fonctionne bien comme prévu. Mais j'ai besoin de comprendre "gamme" paramètre dans cette redirection trop que ce "domaine" est nécessaire pour le modèle utilisé après la redirection. Chaque fois que j'essaie de faire, je reçois plusieurs erreurs de ce type:
-- "Ne pas mélanger *args et **kwargs dans l'appel de la marche arrière()"
Est-il un moyen de gérer comme je veux?
def myView(request):
if request.user.is_authenticated():
if request.method == 'POST':
#my code comes here
....
return redirect('anotherView', username=request.user.username, {"range": range(int(layout))})
def anotherView(request,username):
if request.user.is_authenticated():
#my code comes here
....
return redirect(something)
OriginalL'auteur mco | 2012-02-28
Vous devez vous connecter pour publier un commentaire.
redirect
est qu'un wrapper autour deHttpResponseRedirect
qui appelle automatiquementreverse
pour vous de créer l'URL de redirection. En conséquence, les paramètres que vous passez à elle, ne sont pas arbitraires, ils doivent être de la même vous voulez passer àreverse
et, plus précisément, uniquement ceux qui sont nécessaires pour créer l'URL.Beaucoup de gens semblent avoir des difficultés à comprendre que les données ne peut pas être arbitrairement passé à un point de vue. HTTP est un protocole sans état: chaque demande existe sur son propre, comme si l'utilisateur avait jamais été de toute autre page du site. Le concept d'une session a été créé pour fournir un sens de "état" à la cohésion d'une unité de tel qu'un site. Avec les sessions, les données sont stockées dans une certaine forme de stockage persistant et une "clé" pour rechercher des données est remis au client (le navigateur de l'utilisateur). Sur le chargement de la page suivante, le client envoie la clé sur le serveur, et le serveur utilise pour rechercher les données pour donner l'apparence de l'etat.
Par conséquent, si vous avez besoin de données à partir d'un point de vue disponibles dans un autre, vous devez l'ajouter à la session, faites votre redirection, et de rechercher les données dans la session à partir de la fenêtre suivante.
Super! Et voici la documentation de Django sur les sessions: docs.djangoproject.com/en/1.5/topics/http/sessions
Je ne peux pas éditer les commentaires sur les sessions par @Régis B., mais la version 1.5 maintenant donne une erreur 404. Voici 1.11. docs.djangoproject.com/en/1.11/topics/http/sessions
OriginalL'auteur Chris Pratt
Plutôt que de rediriger vers l'url de destination, il suffit d'appeler la vue de destination directement à la fonction:
Downvoted b/c si vous le faites comme ça, et quelqu'un frappe le bouton actualiser vos données est Affiché à nouveau, ce qui est une mauvaise pratique.
OriginalL'auteur Storn White
Ce que vous essayez de passer la "gamme" de la variable? anotherView? Il n'y a pas de paramètre pour l'accepter. Je pense que vous cherchez peut-être pour la inverse() fonction, mais c'est difficile à dire.
Il n'a pas à être dans l'URL, mais vous aurez besoin d'une certaine manière à accepter cette variable dans anotherView paramètres, soit en spécifiant ou d'utilisation *args, **kwargs comme miki725 suggère.
OriginalL'auteur Tom
Rediriger prend le nom de la vue de redirection, et tous les attributs pour être transmise à l'autre point de vue. Dans votre cas
anotherView
n'a que deux paramètres de demande de nom d'utilisateur et cependant, dans la redirection, vous passez plus d'infos.Vous pouvez essayer quelque chose comme:
Qui vous permettra de passer plus d'attributs.
Modifier
Comment à ce sujet dans le point de vue original:
vérifier la mise à jour de réponse
nope toujours l'erreur, mais différents. ce temps de redirection peut pas trouver "anotherView" vue afin de montrer "URL not found error"
ne sais pas alors. désolé.
reportez-vous à @Chris Pratt répondre
OriginalL'auteur miki725