Ссылка на несколько кнопок отправки в Django - PullRequest
16 голосов
/ 04 мая 2011

Как бы я вызвал следующие формы множественной отправки -

<form action="/" method="post">
    {% csrf_token %}

    <input type="text" name="{{ email.id }}" value=" {{email}}"></td>
    <td><input type="submit" value="Edit"></td>
    <td><input type="submit" value="Delete"></td>
</tr>
</form>

Я хочу сделать что-то вроде этого -

if value = edit:
    do this

if value = delete:
    do this

Как бы я закодировал это в представлениях.py файл?

Ответы [ 4 ]

34 голосов
/ 04 мая 2011

Дайте типам ввода имя и найдите их в вашем request.POST словаре.

Например:

<form action="/" method="post">
    {% csrf_token %}

    <input type="text" name="{{ email.id }}" value=" {{email}}"></td>
    <td><input type="submit" value="Edit" name="_edit"></td>
    <td><input type="submit" value="Delete" name="_delete"></td>
</tr>

и в views.py что-то вроде

if request.POST:
    if '_edit' in request.POST:
         do_edit()
    elif '_delete' in request.POST:
         do_delete()

РЕДАКТИРОВАТЬ: изменено d.has_key(k) на k in d для комментария Даниэля.has_key устарела в python 3.0, и стиль in предпочтительнее, поскольку он более универсален - в частности, d.has_key(k) завершается неудачно, если d не словарь, но k in d работает для любого d, который является итеративным (например, dict, строка, кортеж, список, набор).

8 голосов
/ 17 июля 2013

Я знаю, что этот вопрос задавался давным-давно, но для протокола вот решение с использованием представлений на основе классов. Он использует тот же HTML, что и в ответе д-ра Джимбоба.

from django.views.generic.edit import FormView

class MyView(FormView):
    template_name = 'mytemplate.html'
    form_class = MyForm

    def form_valid(self, form):
        if '_delete' in self.request.POST:
            # do delete
        elif '_edit' in self.request.POST:
            # do edit

Обратите внимание на поведение по умолчанию form_valid:

return HttpResponseRedirect(self.get_success_url())
4 голосов
/ 04 мая 2011

Вам нужно было бы дать кнопкам отправки атрибут имени, например, «действие», затем вы могли бы сослаться на них в коллекции request.POST:

def my_view(request):
    action = request.POST.get('action')
    if action == 'Edit':
        #do edit
    else:
        # do delete

Надеюсь, что это поможет вам.

0 голосов
/ 04 мая 2011
<form action="/" method="post">
<tr>
    <td><input type="text" name="{{ email.id }}" value=" {{email}}"></td>
    <td><input type="submit" value="Edit" name="submit"> </td>
    <td><input type="submit" value="Delete" name="submit"> </td>
</tr>
</form>

views.py будет -

def our_view(request):
    if request.POST.get('submit') == 'Edit':
        make_edit()
    elif request.POST.get('submit') == 'Delete':
        make_deletes()
    else:
        raise Http404()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...