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 шт):

Автор решения: Roman Konoval

Сделайте для каждой кнопки свой метод во 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>
→ Ссылка