Ссылка на несколько кнопок отправки в django
Как я могу вызвать следующие несколько форм отправки -
<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
Как мне закодировать это в файле views.py?
Ответы
Ответ 1
Введите типы входных данных и найдите их в словаре 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()
EDIT: изменено d.has_key(k)
на k in d
на комментарий пользователя Daniel. has_key
устарел в python 3.0, а стиль в нем предпочтителен, поскольку его более общий - в частности, d.has_key(k)
терпит неудачу, если d не является словарем, но k in d
работает для любого d
, который является итерируемым (например, dict, строка, кортеж, список, набор).
Ответ 2
Я знаю, что этот вопрос был задан давно, но для записи здесь есть решение, использующее представления на основе классов. Он использует тот же html, что и в ответе dr jimbob.
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())
Ответ 3
Вам нужно будет предоставить кнопкам submit атрибут имени, например "действие", а затем вы можете ссылаться на них в коллекции request.POST:
def my_view(request):
action = request.POST.get('action')
if action == 'Edit':
#do edit
else:
# do delete
Надеюсь, что это поможет тебе.
Ответ 4
<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()