Est-il possible de rediriger vers une page ou une autre lors de l'envoi d'une requête.POST dans une vue Django, en fonction du bouton utilisé?

Exemple:

<form id="myForm" action='?'>
    <submit button1>
    <submit button2>
</form>

Et puis à mon avis:

if request.method == "POST":
    if form.is_valid() and button1:
        form.save()
        return redirect('page1')
    if form.is_valid() and button2:
        form.save()
        return redirect('page2')
1
HBMCS 2 juin 2020 à 22:34

3 réponses

Meilleure réponse

Vous pouvez essayer ceci:

html

<form>
    <input type="submit" name="button1">
    <input type="submit" name="button2">
</form>

Views.py

if request.method == "POST":
    if form.is_valid() and 'button1' in request.POST:
        form.save()
        return redirect('page1')
    if form.is_valid() and 'button2' in request.POST:
        form.save()
        return redirect('page2')
1
Jonas 2 juin 2020 à 20:00

Je l'ai résolu comme ça:

    <input class="button" value='update' type="submit" name="action" form="eventForm"/>
    <input class="button" value='submit' type="submit" name="action" form="eventForm"/>

Et puis dans la vue:

if request.POST['action'] == 'submit':
[...]
elif request.POST['action'] == 'update'
1
HBMCS 2 juin 2020 à 19:55

Oui. Donnez à vos boutons d'envoi le même nom mais des valeurs différentes

<button type="submit" name="submit" value="button1">Button 1</button>
<button type="submit" name="submit" value="button2">Button 2</button>

Le bouton sur lequel vous avez cliqué sera alors disponible dans la demande.

if request.method == "POST" and form.is_valid():
    form.save()
    if request.POST['submit'] == 'button1':
        return redirect('page1')
    elif request.POST['submit'] == 'button2':
        return redirect('page2')
1
Andee 2 juin 2020 à 19:56