@olaRing
Python in my mind

Как лучше всего организовать много разных форм на странице?

Всем привет!

Возникла задача размещения множества форм на разных страницах. Каждая форма - это часть отдельного приложения (app) со своими путями. Почти все приложения - свои, некоторые - сторонние.

Вроде бы очевидное решение - использовать inclusion-tags, но, к сожалению не нашла хороших примеров реализации, а вопросов возникла масса, основных два:

1. Как правильно написать тэг?
Если всю обработку помещать во view, то для тэга остаётся только рендер формы:
@register.inclusion_tag('core/my/form.html')
def my_form():
    return {'form': MyForm()}
но в этом случае непонятно, как будут подсвечиваться неправильно заполненные поля в форме, ведь она будет каждый раз отрисовываться пустой.
Если всю логику переносить в тэг, то как его подключать к путям и как отличать post запрос от разных форм - анализировать путь или вводить скрытый name для формы?

2. Как возвращать пользователя обратно на страницу с обработчика формы? Например пользователь находится на странице '/index', а обработчик формы имеет путь '/core/subscribe'. При нажатии кнопки в форме должен отработать view на '/core/subscribe', а потом вернуть пользователя на '/index' с сообщением об успешной подписке или с невалидной формой и подсвеченными неверно заполнеными полями.

Может идея использование inclusion tags изначально неверная и есть другие способы решения этой задачи?
  • Вопрос задан
  • 330 просмотров
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Идея отдавать формы через рендер - вообще не очень правильная. Это было актуально лет 10 назад, где не было кучи форм на странице, и одна форма - один вью работала прекрасно. Рекомендую формы посылать и передавать через json/ajax, а для рендера использовать сторону клиента и javascript c jquery/reactjs/vuejs/angularjs... Да, наверное это немного перечеркивает ваш внутренний мир, но так уж вышло, что на сегодняшний день это так.
С другой стороны все становится проще - пишете шаблоны со своей кучей форм, пишете роуты-эндпоинты для ajax с приемом-выдачей json, остальное - сторона клиента. И тестировать легче, и кучу форм держать на одной странице, и посылать их тоже легче, в конечном итоге даже работать быстрее будет, так как не нужно каждый раз гонять всю страницу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы