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

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

Войти через центр авторизации
Похожие вопросы