2015-08-28 3 views
1

У меня есть шаблон Django (html-файл). Он содержит выпадающий селектор с множеством опций. При выборе каждой опции в браузере отображается предопределенная форма. Каждая такая форма имеет предопределенные поля.Создание динамических форм «на лету» в шаблоне Django

Для бывшего, по выбору О опции, форма будет -.

Name - 
Age - 

И выбрав вариант образования, форма будет -

University - 
CGPA - 

Теперь Что это лучший способ осуществить это функциональность?

Формат 1 - При выборе любой опции я делаю вызов Ajax на сервер и возвращаю json полей для отображения.

Формат 2 - Я жесткий код несколько форм в шаблоне и сделать их visiblity - верно в соответствии с выбранной опцией (я не убежден в этом)

Формат 3. - Любое новое решение который я ищу здесь.

Благодаря

ответ

1

Одним из способов достижения этой цели, как я реализовал его несколько дней назад:

Отправить АЯКС вызов на сервер какой форме вам нужно, а затем отправить из обратно в шаблон в HTML-форме ,

form = Yourform() 
form = form.as_p() 
return HttpResponse(form) 

Это вернет вашу форму в формате HTML. Теперь все, что вам нужно сделать, это заменить ваш контейнер новой формой. Надеюсь, это поможет!

+0

Только примечание, так как @akg упоминалось, что формы могут быть совершенно разными, метод views.py, который обрабатывает форма должна определить, какая форма заполняется в шаблоне. –

+0

для этого @akg можно использовать простой если еще состояние. Я думал, что здесь важная роль.: D –

+0

Я не комментирую «важную роль», я просто хочу указать, что форма из самого шаблона не может указать бэкэнд, какая форма должна использоваться. У вас должно быть что-то еще в данных 'POST', чтобы сообщить серверу. –

0

В зависимости от того, кто будет поддерживать его позже!

Если вы хотите запросить бэкэнд для полей, то кто хочет добавить новые поля в форму, должен получить доступ к внутреннему коду и вставить его там. Как правило, не все имеют к нему доступ! И этот человек должен знать Джанго. Кроме того, с помощью ajax вы все еще выполняете HTTP-запрос, хотя на localhost, который может иметь небольшое отставание по сравнению с жестко закодированными формами

Скорее всего, вы, вероятно, можете использовать django templating engine в полном объеме, например, наследование шаблонов и т. чтобы уменьшить избыточность кода и сохранить формы в самом интерфейсе! Таким образом, если внешнему человеку нужно добавить что-то новое, он может сделать это в HTML!

Если у вас есть тысячи полей в форме, которые слишком много для ввода или обслуживания, вы можете сделать запрос ajax. Или же держать в интерфейсе хорошо работает!

Надеюсь, это поможет!

(кто планирует downvote ответ, пожалуйста, говоря о причине тоже, downvoting)

Смежные вопросы