2013-10-30 2 views
2

У меня есть простая форма Django с полем изображения и некоторыми другими полями. Теперь пользователь ввел поле формы и нажал на submit. Из-за некоторой ошибки форма не подтверждена.Как заполнить поле изображения при ошибке проверки формы Django?

В результате не подтвержденной формы поле изображения формы очищается, то есть пользователь должен снова ввести поле изображения. Я не хочу, чтобы это произошло. Я хочу, чтобы поле изображения содержало то же значение, которое вводил пользователь. Можно ли сделать это ?

Примечание: то, что я прочитал и знаю, не существует способа предварительного заполнения этого поля изображения, так как это может быть большой угрозой безопасности. Но один из моих технических клиентов настаивает на том, что это можно сделать с использованием переменных сеанса. Является ли это возможным ?

ответ

3

Подтвердить форму на стороне клиента с помощью JavaScript и предотвратить отправку, если форма не действительна. Таким образом, вы не потеряете существующий контент, потому что ваша форма не будет отправлена, если она уже не подтверждена.

Предполагая, что вы используете jQuery, вы можете привязываться к событию клика кнопки отправки и использовать preventDefault, чтобы остановить поведение по умолчанию. Затем подтвердите форму и отправьте ее, только если она окажется действительной.

Таким образом, у вас будет только форма, представленная Django после того, как она уже была проверена, и пока ваша проверка на стороне клиента будет надежной, вы не должны испытывать эту проблему.

2

Чтобы показать изображение в представлении, его нужно будет сохранить на вашем сервере, S3 или что-то еще, что вы используете для статических/мультимедийных файлов.

Из JavaScript вы можете сохранить выбранный файл в localStorage и установить запоминаемый выбранный путь при ошибке формы. Я не уверен, поддерживает ли API-интерфейс файловой системы HTML5. См. http://www.html5rocks.com/en/tutorials/file/filesystem/

Как сказал Мэтью Дейли, проверка на стороне клиента - лучший выбор; что-нибудь еще, вероятно, будет головной болью.

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