Django. Как отправить действие во views.py
Входные данные:
Имеется сайт на Django. Одна из template содержит 20 кнопок для обнуления некоторых данных в базе данных. Пользуются данной страницей не часто и то только избранные, поэтому вопроса о логичности данного решения я не ставлю. Каждая кнопка уникальна и при нажатии пересылает некоторые данные во views.py (назовем их регистр и состояние).
Как работает сейчас
Каждая кнопка оборачивается в <form action="" method="post"></form> и содержит скрытые input, которые содержат необходимые флаги для манипуляций на стороне сервера и БД. Во views.py смотрятся какие регистр и состояние пришли из template и по флагу направляется в одну из веток if, и относительно этого строятся запросы к БД и логика поведения.
Что не так
При нажатии на любую кнопку во views.py летят все input, csrf-токены и прочий не нужный мусор.
Вопрос
Есть ли решение, которое позволяет одназначно определить нажатие кнопки для метода POST, чтобы не затрагивать всю информацию со страницы, а получить один токен и одну пару регистр:состояние? Плюс избежать загромождающую логику во views.py, которая содержит "миллион" if-ов
В решениях на SO примеры почти все одинаковые и реализовано как описано выше в пункте "Как работает сейчас"
Ответы (1 шт):
Сделайте для каждой кнопки свой метод во views.py:
def action1(request):
...
def action2(request):
...
Добавьте их в urls.py:
urlpatterns = [
url(r'^existing/path/action1', views.action1),
url(r'^existing/path/action2', views.action2),
...
]
При заворачивании кнопки в форму задавайте action и необходимые для действия параметры:
<form action="action1" method="post">
... тут только параметры для action1
</form>