I have been playing around with web2py to see what I can do or not do. I must say I like what I see. It seems very intuitive and easy to work with.
I am using windows XP SP3, python 2.5.4, web2py 1.64.4 It would seem that the default format for forms is to output them as tables. So I have looked at using Custom Forms but continuing to use the validation system. I have picked up examples from various messages and modified them to see what I can do. The custom forms work with the simple layout I have been using for my tests. But the one thing I have become stuck on at the moment is how I can change the position of error messages. I have included the code I have been using. You can see how I have played around with using my own form views and adding form elements and widgets myself to see what happens. If you submit the form, it is validated and the error messages appear attached to each form item. Ideally I would like to control where the error messages appear. But I have become brain dead. I must be overlooking something obvious. So I am checking to see if anyone can give me a pointer to what I can do. One other point is that by default every element comes with a class name attached. I could just update each element and set the class to None to get rid of it. And if I need to I could then add my own class names. But from the point of view of keeping the form tidy, would it be useful to be able not to have default class names attached. Then I can avoid having to set each element off. Here is the code. I hope the formatting stays good so you can read it. The model just has some menu code so I can see what I can do with menus. It works, but not sure if I have put it in the right place holder. I must admit I have not found too much info on menus. Model try: from gluon.contrib.gql import * # if running on Google App Engine except: db = SQLDB('sqlite://storage.db') # if not, use SQLite or other DB else: db = GQLDB() # connect to Google BigTable session.connect(request, response, db=db) # and store sessions there # or use the following lines to store sessions in Memcache #from gluon.contrib.memdb import MEMDB #from google.appengine.api.memcache import Client #session.connect(request, response, db=MEMDB(Client())) response.menu = [ ['Index', False, URL(request.application,'default','index')], ['another', False, URL(request.application,'default','another')], ] Controller # # sample index page with internationalization (T) def index(): response.flash = T('Welcome to web2py') return dict(message=T('Hello World')) def form_factory(*a): return SQLFORM(SQLDB(None).define_table(*a)) #and now you can create a controller like the following def formtest2(): options = ['Mr','Dr','Mrs','Ms'] options2 = ['New York','Boston','Baltimore'] form=form_factory('myform', SQLField('name','string',requires=IS_NOT_EMPTY()), SQLField('lastname','string',requires=IS_NOT_EMPTY()), SQLField('address1','string',requires=IS_NOT_EMPTY()), SQLField('address2','string',requires=IS_NOT_EMPTY()), SQLField('test',requires=IS_IN_SET(options)), SQLField('city',requires=IS_IN_SET(options2)), SQLField('zip','string',requires=IS_NOT_EMPTY())) if form.accepts(request.vars,session): response.flash='formc accepted' ### do something with form.vars, perhaps redirect somewhere else elif form.errors: response.flash='errors in formc' else: response.flash='please fill the formc again' return dict(form=form, vars=form.vars) View {{extend 'layout.html'}} <h1>This is the default/formtest2.html template</h1> <title>Layout Form without Tables</title> <style type="text/css"> .formLayout { background-color: #f3f3f3; border: solid 1px #a1a1a1; padding: 10px; width: 300px; } .formLayout label, .formLayout input { display: block; width: 120px; float: left; margin-bottom: 10px; } .formLayout label { text-align: right; padding-right: 20px; } br { clear: left; } </style> </head> <body> <form action="" enctype="multipart/form-data" method="post"> <div class="formLayout"> <h2>Contact Form</h2><br> <label>Title</label> {{=form.element(_name="test")}}<br> <label>First Name</label> {{=form.element(_name="name")}}<br> <label>Last Name</label> {{=form.element(_name="lastname")}}<br> <label>Address</label> {{form.element(_name="address1").update(_class=None)}} {{=form.custom.widget.address1}}<br> <label></label> {{=form.element(_name="address2")}}<br> <label>City</label> {{=form.element(_name="city")}}<br> <label>Zip</label> {{=form.element(_name="zip")}}<br> <div style="padding-left:7em"> <input type="submit" value="submit" ><br></div> </div> CUSTOM {{=form.custom}}FIELDS {{=form.fields}} ERRORS {{=form.errors}} LAST {{=form.custom.dspval.address1}} {{=form.custom.inpval.address1}}<br> {{=form.hidden_fields()}} </form> </body> </html> End of Code I hope someone can give me a few pointers, or point out any obvious mistakes. Regards John Aherne --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---