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
-~----------~----~----~----~------~----~------~--~---

Reply via email to