le 06.04.2009 05:41 chris_g a écrit:
> Hi,
>
> I am following the example for TurboGears 1.0 Unified Form Data
> Validation :
>
> http://docs.turbogears.org/1.0/UnifiedControllers
>
> I've created a fairly complicated example where the same method
> handles an add & edit form using TurboGears 1.0.7 & FormEncode 1.0.1 .
>
> The form layout is dynamic, it depends on user permission and workflow
> state to determine the fields that are present and if they are
> editable etc.
>
> I am finding I can add an entry if there are no form validation erros
> in the form data, but my form falls over when I try to render the form
> for correction because the form is getting an internal error from
> the validation error.
>
>
When you are rendering an existing data set, do you pass only the id or
use kw ?
If there are no kw params, you should not go through the if kw: part and
render the form... But if you use kw you will trigger the
get_errors(...) and eventually render the form too with tg_errors added
to the return dict.
Are you sure the issue is not in your form definition or the "params"
you pass when in the last "else: # no data posted..." I would look there
first.
> @expose(template="webordering.templates.order_form")
> @identity.require(identity.not_anonymous())
> def index(self, id='', tg_errors=None, *args, **kw):
>
> plu_classes, plu_classes_data, maxOrderLines, pluClassNum =
> self._get_plu_classes()
>
> displayBlankPlu = True
> user = identity.current.user
> group_names = [g.group_name for g in
> identity.current.user.groups]
> id = id or kw.get('id','')
> if id:
> mode, displayBlankPlu, status_code =
> self._get_display_options(id, user, group_names)
>
> if kw:
> # form data has been posted.
> if id:
> # edit an existing order
> form_args = dict(mode=mode, status_code=form_data
> ['status_code'], outerRepetitions=pluClassNum,
> innerRepetitions=maxOrderLines)
> form = get_order_form(**form_args)
> else:
> # add a new order.
> store_id = kw.get('store_id', None)
> store_options = self._get_store_options(store_id,
> user)
> form_args = dict(mode='add', status_code='PEND',
> store_options=store_options, outerRepetitions=pluClassNum,
> innerRepetitions=maxOrderLines)
> form = get_order_form(**form_args)
>
> @validate(form=form)
> def get_errors(self, tg_errors=None, **data):
> log.info('OrderController.index.get_errors data=
> %r'%data)
> return tg_errors, data
>
> tg_errors, form_data = get_errors(self, **kw)
>
> # errors = [(param,inv) for param, inv in tg_errors.items
> ()]
> if not tg_errors:
> # Perform some action with the data in **data. **kw
> still contains the raw data.
> flash_message, oh = self._process(*args, **form_data)
> flash(flash_message)
> redirect(oh.get_url().replace('/order',''))
>
> else:
> if id:
> flash("Errors were encountered.")
> params = self._edit(plu_classes_data, mode, id,
> form_data, displayBlankPlu, *args, **kw)
> else:
> flash("Errors were encountered.")
> params = self._add(plu_classes_data, form_data,
> displayBlankPlu, *args, **kw)
> params['template'] =
> 'webordering.templates.order_form'
>
> else:
> # no data posted
> form_data = None
> if id:
> # edit - retrieve record from database.
> params = self._edit(plu_classes_data, mode, id,
> form_data, displayBlankPlu, *args, **kw)
> else:
> # new - enter blank form.
> params = self._add(plu_classes_data, form_data,
> displayBlankPlu, *args, **kw)
> log.info('OrderController.index -> else: type=%r'%type
> (params))
> if 'makeInvoiceURL' not in params:
> params['makeInvoiceURL'] = False
> params.update(get_sidebars())
> return params
>
>
>
>
> 500 Internal error
>
> The server encountered an unexpected condition which prevented it from
> fulfilling the request.
>
> Page handler: <bound method OrderController.index of
> <webordering.controllers.OrderController object at 0xb745096c>>
> Traceback (most recent call last):
> File "/usr/local/lib/python2.4/site-packages/CherryPy-2.3.0-
> py2.4.egg/cherrypy/_cphttptools.py", line 121, in _run
> self.main()
> File "/usr/local/lib/python2.4/site-packages/CherryPy-2.3.0-
> py2.4.egg/cherrypy/_cphttptools.py", line 264, in main
> body = page_handler(*virtual_path, **self.params)
> File "<string>", line 3, in index
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/controllers.py", line 358, in expose
> output = database.run_with_transaction(
> File "<string>", line 5, in run_with_transaction
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/database.py", line 407, in sa_rwt
> retval = func(*args, **kw)
> File "<string>", line 5, in _expose
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/controllers.py", line 373, in <lambda>
> mapping, fragment, args, kw)))
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/controllers.py", line 423, in _execute_func
> return _process_output(output, template, format, content_type,
> mapping, fragment)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/controllers.py", line 88, in _process_output
> fragment=fragment)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/view/base.py", line 161, in render
> return engine.render(**kw)
> File "/usr/local/lib/python2.4/site-packages/TurboKid-1.0.4-
> py2.4.egg/turbokid/kidsupport.py", line 206, in render
> output=output, format=format)
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> __init__.py", line 301, in serialize
> raise_template_error(module=self.__module__)
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> __init__.py", line 299, in serialize
> return serializer.serialize(self, encoding, fragment, format)
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> serialization.py", line 107, in serialize
> text = ''.join(self.generate(stream, encoding, fragment, format))
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> serialization.py", line 629, in generate
> for ev, item in self.apply_filters(stream, format):
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> serialization.py", line 165, in format_stream
> for ev, item in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
> for ev, item in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> serialization.py", line 477, in inject_meta_tags
> for ev, item in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 41, in apply_matches
> templates[:i] + templates[i+1:], apply_func):
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 41, in apply_matches
> templates[:i] + templates[i+1:], apply_func):
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 26, in apply_matches
> for ev, item in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
> for ev, item in stream:
> File "/home/chris/sup1/WebOrdering/webordering/templates/
> order_form.py", line 56, in _match_func
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/meta.py", line 110, in lockwidget
> output = self.__class__.display(self, *args, **kw)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 387, in display
> return super(CompoundWidget, self).display(value, **params)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 52, in _update_path
> returnval = func(self, *args, **kw)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 237, in display
> return super(InputWidget, self).display(value, **params)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 294, in display
> return transform(params, self.template_c)
> File "/usr/local/lib/python2.4/site-packages/TurboKid-1.0.4-
> py2.4.egg/turbokid/kidsupport.py", line 220, in transform
> return kid.ElementStream(t.transform()).expand()
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 108, in expand
> for ev, item in self._iter:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 26, in apply_matches
> for ev, item in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
> for ev, item in stream:
> File "<string>", line 85, in _pull
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/meta.py", line 110, in lockwidget
> output = self.__class__.display(self, *args, **kw)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 387, in display
> return super(CompoundWidget, self).display(value, **params)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 52, in _update_path
> returnval = func(self, *args, **kw)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 237, in display
> return super(InputWidget, self).display(value, **params)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 294, in display
> return transform(params, self.template_c)
> File "/usr/local/lib/python2.4/site-packages/TurboKid-1.0.4-
> py2.4.egg/turbokid/kidsupport.py", line 220, in transform
> return kid.ElementStream(t.transform()).expand()
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 108, in expand
> for ev, item in self._iter:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 26, in apply_matches
> for ev, item in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
> for ev, item in stream:
> File "<string>", line 92, in _pull
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 387, in display
> return super(CompoundWidget, self).display(value, **params)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 52, in _update_path
> returnval = func(self, *args, **kw)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 237, in display
> return super(InputWidget, self).display(value, **params)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 294, in display
> return transform(params, self.template_c)
> File "/usr/local/lib/python2.4/site-packages/TurboKid-1.0.4-
> py2.4.egg/turbokid/kidsupport.py", line 220, in transform
> return kid.ElementStream(t.transform()).expand()
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 108, in expand
> for ev, item in self._iter:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> filter.py", line 26, in apply_matches
> for ev, item in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 179, in _track
> for p in stream:
> File "/usr/local/lib/python2.4/site-packages/kid-0.9.6-py2.4.egg/kid/
> parser.py", line 221, in _coalesce
> for ev, item in stream:
> File "<string>", line 104, in _pull
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 52, in _update_path
> returnval = func(self, *args, **kw)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 237, in display
> return super(InputWidget, self).display(value, **params)
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/base.py", line 280, in display
> params["value"] = to_unicode(self.adjust_value(value, **params))
> File "/usr/local/lib/python2.4/site-packages/TurboGears-1.0.7-
> py2.4.egg/turbogears/widgets/forms.py", line 233, in adjust_value
> value = self.validator.from_python(value)
> File "/usr/local/lib/python2.4/site-packages/FormEncode-1.0.1-
> py2.4.egg/formencode/api.py", line 418, in from_python
> value = self._from_python(value, state)
> File "/usr/local/lib/python2.4/site-packages/FormEncode-1.0.1-
> py2.4.egg/formencode/validators.py", line 948, in _to_python
> value, state)
> Invalid: Please enter an integer value
> Error location in template file '/home/chris/sup1/WebOrdering/
> webordering/templates/order_form.kid'
> between line 10, column 4 and line 11, column 4:
> <p py:content="form.display(value=form_data,
> repetitions=repetitions, f ...
>
> Powered by CherryPy 2.3.0
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---