Форум сайта python.su
Помогите, плиз, совсем туплю.
Вот валидаторы обрабатывают ввод. А как мне отобразить ошибки, которые происходят уже в контролере?
Например произошло исключение в базе данных - номер существует, хочется так-же его подсветить контрол с номером на форме.
Офлайн
PooH ты хочешь сделать это через декораторы?
попробуй:
http://docs.turbogears.org/1.0/ErrorHandling?action=show&redirect=1.0%2FExceptionHandling
http://docs.turbogears.org/1.0/ErrorHandling
или можно свой написать декоратор
Офлайн
PooHЯ перехватываю исключение сам, и для сообщения использую flash():
А как мне отобразить ошибки, которые происходят уже в контролере?
Отредактировано (Март 5, 2007 21:31:51)
Офлайн
В Django это делается так: один метод в контролёре обрабатывает и отображение формы и её обработку, разделяя их по типу запроса (GET/POST).
Например так:
methodname():
if request.POST:
# запрос POST, обработка данных из формы
....
if errors: # ошибка в данных
# показать форму, передав в неё переменную errors (tg_errors в TurboGears)
else:
# показать результат
else:
# запрос GET, данных формы нет, отображаем её
< input type="text" name="address" />
< label py:if="tg_errors['address'] for="address">Ошибка в поле адреса< /label>
Офлайн
MaximboТ.е. в Django вообще нет валидаторов и все делается вручную?
В Django это делается так
Офлайн
OlDerВалидаторы в Django есть, и они очень мощные. Правда не через декораторы. Но к данному топику это не относится ;)
Т.е. в Django вообще нет валидаторов и все делается вручную?
Офлайн
Не знаю, насколько правильно, но пока решил так:
import turbogears.util as tg_util from turbogears import errorhandling import cherrypy def showErrors(method, errors, *args, **kw): cherrypy.request.validation_errors = errors args, kw = tg_util.from_kw(method, args, kw) return errorhandling.run_with_errors(errors, method, *args, **kw)
@expose() @validate(form=parcelForm) @error_handler(edit) def save(self, id=None, *args, **kw): errors = {} #------ skip ---------- try: obj.setAllowUse(useForm,date) except model.InvalidDateError: errors['useForm'] = u"На указаную дату значение существует" #------ skip ---------- if errors: return showErrors(self.edit, errors, args, kw) else: flash(u'Данные сохранены') raise redirect("/parcel/edit?id=%s" % obj.id)
Отредактировано (Март 12, 2007 08:04:09)
Офлайн