Как я могу получить доступ к значению кнопки формы формы в Django?
У меня есть проект Django, который на одной странице имеет несколько форм (в разных тегах), которые могут быть представлены с различными эффектами. Во всех случаях я хочу, чтобы пользователь был перенаправлен обратно на ту же страницу, поэтому я использую на мой взгляд шаблон отправки формы и затем перенаправление на исходную страницу. По меньшей мере в одном случае единственной разницей между двумя формами является значение кнопки отправки.
На мой взгляд, у меня есть код (первый раз, когда моя функция просмотра обращается к request.POST
):
if request.POST['submit']=='Add':
#code to deal with the "Add" form
а в шаблоне первая форма имеет кнопку отправки, например
<input type="submit" value="Add">
Я думал, что это сработает, но когда я отправлю эту форму, я получаю сообщение об ошибке в строке сверху:
Ключ 'submit' не найден в <QueryDict: {u'clientyear': [u'2012'], u'csrfmiddlewaretoken': [u'be1f2f051f09f6ab0375fdf76cf6a4d7'], u'ben': [u'123405']}>
Очевидно, что у него нет ключа 'submit'
или любой клавиши со значением, соответствующим кнопке отправки, которую я нажал. Итак, поскольку это не работает, как получить доступ к значению кнопки отправки или указать, какая из форм была отправлена?
Ответы
Ответ 1
Submit
- это структура HTML-формы... Вы должны использовать атрибут name для объектов формы следующим образом: В вашем шаблоне:
<form>
...
<input type="submit" name="list" value="List Objects" />
</form>
<form>
...
<input type="submit" name="do-something-else" value="Do Something Else" />
</form>
На ваш взгляд:
if 'list' in request.POST:
# do some listing...
elif 'do-something-else' in request.POST:
# do something else
Ответ 2
Одна вещь, чтобы иметь в виду, чтобы предотвратить путаницу. Кнопка name
кнопки отправки не будет отображаться, если в форме есть только одна кнопка.
#template.html
<form action="..." method="post">
<input type="submit" name = "first_button" value="Add">
</form>
#view.py
...
'first_button' in request.POST #False
#template.html
<form action="..." method="post">
<input type="submit" name = "first_button" value="Add">
<input type="submit" name = "second_button" value="Remove">
</form>
#view.py
...
'first_button' in request.POST #True if you clicked on that button