I still not manage to get a clean solution to my problem. What I managed to do is shutting the error by making some modification in __init__.py of formbuild in the start_with_layout() function, where I commented "return html + u'<table class="%s">'%(escape(table_class or self.table_class))", having "return html + u'<table>'" instead. It managed to get rid of the error, but I don't think that's a good way to do it.
On Dec 16, 1:01 am, Boyi <[email protected]> wrote: > Dear All, > > I am new to pylons and python, need help with a problem that I have. > Sorry if my question sounds silly. > I am learning through the pylons book, currently working on chapter 8. > I am using pylons 1.0 and formbuild 3.0 and mako. Therefore I modified > the code to suit the packages by referring to the codes available in > the posts and internet. > > While executinghttp://localhost:5000/page/new, I received an error of > AttributeError: 'function' object has no attribute 'replace'. It seems > that the coding below ( in new.html) is the source of the error. > > ${h.form.start_with_layout(h.url(controller='page', > action='create'),method='post')} > > However it wont be an error if I use start_layout() function instead. > ${h.form.start_layout(h.url(controller='page', action='create'))} > > I am using the start_with_layout() because it is illustrated in the > book examples. Am I missing something? > By the way, another question, how do I specify the textarea cols and > rows in formbuild3. I cant find the example in doing that. > > The coding and the errors notification is shown below. > > TQ in Advance. > > ________________________________________ > Form is in "forms" module--> > > from formbuild import Form > from webhelpers.html import literal > > class LiteralForm(Form): > def __getattribute__(self, name): > if name in ['value', 'option', 'error', 'checked', 'flow']: > return Form.__getattribute__(self, name) > def make_literal(*k, **p): > return literal(getattr(Form, name)(self, *k, **p)) > return make_literal > > _____________________________________________________ > > helpers.py --> > > from webhelpers.html.tags import * > from simplesite.forms import LiteralForm > from pylons import url > > form = LiteralForm( > value={ > 'heading':u'', > 'title':u'', > 'content':u'' > } > ) > _______________________________________ > > fields.html --> > > ${h.form.field( > label="Heading", > type='text', > name='heading', > required=False, > )} > ${h.form.field( > label="Title", > type='text', > name='title', > required=True, > field_desc = "Used as the heading too if you didn't specify one > above" > )} > ${h.form.field( > label="Content", > type='textarea', > name='content', > required=True, > field_desc = 'The text that will make up the body of the page' > )} > > ______________________________________________________ > new.html--> > > <%inherit file="/base/index.html" /> > <%namespace file="fields.html" name="fields" import="*"/> > > <%def name="heading()"> > <h1 class="main">Create a New Page</h1> > </%def> > > form.start_with_layout(h.url(controller='page', > action='create'),method='post')} > ${fields.body()} > ${h.form.action_bar(h.form.submit(value="Create Page", > name='submit'))} > ${h.form.end_layout()} > > ______________________________________________________ > Error notifications ---> > > AttributeError: 'function' object has no attribute 'replace' > > 5 <h1 class="main">Create a New Page</h1> > 6 </%def> > 7 > 8 ${h.form.start_with_layout(h.url(controller='page', > action='create'),method='post')} > 9 ${fields.body()} > 10 ${h.form.action_bar(h.form.submit(value="Create Page", > name='submit'))} > 11 ${h.form.end_layout()} > 12 > > /usr/lib/python2.5/cgi.py, line 1055: > s = s.replace("&", "&") # Must be done first! > /tomyapp/mydevenv/lib/python2.5/site-packages/FormBuild-3.0.3- > py2.5.egg/formbuild/__init__.py, line 188: > return html + u'<table class="%s">'%(escape(table_class or > self.table_class)) > /tomyapp/SimpleSite/simplesite/forms.py, line 9: > return literal(getattr(Form, name)(self, *k, **p)) > /tomyapp/SimpleSite/simplesite/templates/derived/page/new.html, line > 8: > ${h.form.start_with_layout(h.url(controller='page', > action='create'),method='post')} > /tomyapp/SimpleSite/simplesite/templates/base/index.html, line 16: > ${next.body()} > /tomyapp/mydevenv/lib/python2.5/site-packages/Mako-0.3.6-py2.5.egg/ > mako/runtime.py, line 626: > callable_(context, *args, **kwargs) > /tomyapp/mydevenv/lib/python2.5/site-packages/Mako-0.3.6-py2.5.egg/ > mako/runtime.py, line 637: > result = template.error_handler(context, error) > /tomyapp/mydevenv/lib/python2.5/site-packages/Mako-0.3.6-py2.5.egg/ > mako/runtime.py, line 628: > _render_error(template, context, e) > /tomyapp/mydevenv/lib/python2.5/site-packages/Mako-0.3.6-py2.5.egg/ > mako/runtime.py, line 607: > _exec_template(inherit, lclcontext, args=args, kwargs=kwargs) > /tomyapp/mydevenv/lib/python2.5/site-packages/Mako-0.3.6-py2.5.egg/ > mako/runtime.py, line 575: > **_kwargs_for_callable(callable_, data)) > /tomyapp/mydevenv/lib/python2.5/site-packages/Mako-0.3.6-py2.5.egg/ > mako/template.py, line 292: > as_unicode=True) > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/templating.py, line 240: > return literal(template.render_unicode(**globs)) > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/templating.py, line 218: > return render_func() > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/templating.py, line 243: > cache_type=cache_type, cache_expire=cache_expire) > /tomyapp/SimpleSite/simplesite/controllers/page.py, line 25: > return render('/derived/page/new.html') > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/controllers/core.py, line 57: > return func(**args) > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/controllers/core.py, line 105: > result = self._perform_call(func, args) > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/controllers/core.py, line 162: > response = self._inspect_call(func) > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/controllers/core.py, line 211: > response = self._dispatch_call() > /tomyapp/SimpleSite/simplesite/lib/base.py, line 18: > return WSGIController.__call__(self, environ, start_response) > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/wsgiapp.py, line 312: > return controller(environ, start_response) > /tomyapp/mydevenv/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/ > pylons/wsgiapp.py, line 107: > response = self.dispatch(controller, environ, start_response) > /tomyapp/mydevenv/lib/python2.5/site-packages/Routes-1.12.3-py2.5.egg/ > routes/middleware.py, line 131: > response = self.app(environ, start_response) > /tomyapp/mydevenv/lib/python2.5/site-packages/Beaker-1.5.4-py2.5.egg/ > beaker/middleware.py, line 152: > return self.wrap_app(environ, session_start_response) > /tomyapp/mydevenv/lib/python2.5/site-packages/WebError-0.10.3- > py2.5.egg/weberror/evalexception.py, line 431: > app_iter = self.application(environ, detect_start_response) -- You received this message because you are subscribed to the Google Groups "pylons-discuss" 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/pylons-discuss?hl=en.
