web-dev-qa-db-fra.com

Comment rediriger vers une URL externe dans Django?

Je pense que cela devrait être facile, mais je ne peux pas le comprendre. J'essaie d'écrire une vue de retrait. Je reçois une demande d'obtention. Grâce à urls.py, je rend ma vue de désactivation. Dans cette vue, j'enregistre certains paramètres pour l'utilisateur dans la base de données, puis je souhaite rediriger l'utilisateur vers une URL externe. J'ai essayé:

return redirect('http://stackoverflow.com/')

à partir de documentation Django . Cependant, la vue optout rend le modèle de formation au lieu de renvoyer la redirection, bien que les paramètres soient enregistrés dans la base de données comme prévu. Mon code est le suivant:

def optout(request):
    if (('REMOTE_USER' in request.META and request.META['REMOTE_USER'] != "") or 
        (request.session.get('userid', False) and request.session['userid'] != "")):
        if ('REMOTE_USER' in request.META and request.META['REMOTE_USER'] != ""):
            userid = request.META['REMOTE_USER']
        if (request.session.get('userid', False) and request.session['userid'] != ""):
            userid = request.session['userid']
        user = User.objects.get(username=userid)
        user.optout = True
        user.postpone = False
        user.save()
        return redirect('http://stackoverflow.com/')
    context = { 'userid': "" }
    return render(request, 'games/Training.html', context)

Toute aide est grandement appréciée.

15
1man

Oui, return redirect('http://stackoverflow.com/') est la bonne méthode.

Si vous procédez comme suit, vous pouvez confirmer qu'il s'agit d'une méthode de travail pour rediriger.

def optout(request):
    return redirect("http://stackoverflow.com/")

Vos déclarations conditionnelles ne doivent pas être saisissantes.

10
sytech

en utilisant la classe HttpResponseRedirect

from Django.http import HttpResponseRedirect

def out(request):
    return HttpResponseRedirect("http://google.com")

Ou:

en utilisant la classe HttpResponse

from Django.http import HttpResponse

def out(request):
    response = HttpResponse("", status=302)
    response['Location'] = "http://google.com"
    return response

REMARQUE:

Le dernier est utile pour rediriger d'un site Web vers une application mobile (Android/Iphone). Où est l'emplacement scheme://Host

6
sandes