that messes up order. Try this:
{{=form.custom.begin}}
<ul>
{{ for fieldname in form.table.fields: }}{{if fieldname=='id':}}
<li><label>{{=form.custom.label[fieldname]}}</label>
{{=form.custom.widget[fieldname]}}</li>
{{pass}}{{pass}}
<li>{{=form.custom.submit}}</li>
</ul>
{{=form.custom.end}}
On Sep 22, 10:19 am, Keith <[email protected]> wrote:
> Oh nice! I didn't know you could use SQLFORM if you weren't using a
> database, very nice. Sure looks allot nicer by default.
>
> So based on your example I'm doing this...
>
> def roomcreate():
> form = SQLFORM.factory(
> Field('room_name', requires=IS_NOT_EMPTY()),
> Field('attendee_pw',requires=IS_NOT_EMPTY()),
> Field('moderator_pw',requires=IS_NOT_EMPTY()),
> )
>
> In the view, {{=form}} gives a pretty <table> version of the form.
> What is the proper way to loop through and get the name and
> formfield? I couldn't figure out how to apply your suggestion of
> form['_name']. I know I'm doing something wrong with the syntax but
> this is what I have:
>
> {{ for fieldname in form: }}
> <li><label>{{=fieldname['_name']}}</label>{{=fieldname}}</li>
> {{pass}}
>
> As a end result I want something like this
>
> <li><label>Room Name</label><input class="string" name="room_name"/></
> li>
> <li><label>Attendee Pw</label><input class="string" name="attendee_pw"/></li>
>
> <li><label>Moderator Pw</label><input class="string"
> name="moderator_pw"/></li>
>
> I saw in the documentation some form.custom stuff (http://web2py.com/
> book/default/chapter/07#Custom-forms) which is nice because it allows
> me to call name (form.custom.label) and form element
> (form.custom.widget). I was able to figure out a way to loop through
> it but I seem to be getting some things that aren't part of the form.
> Here is what I'm doing now:
>
> {{=form.custom.begin}}
> <ul>
> {{ for fieldname in form.custom.label: }}
> <li><label>{{=form.custom.label[fieldname]}}</label>
> {{=form.custom.widget[fieldname]}}</li>
> {{pass}}
> <li>{{=form.custom.submit}}</li>
> </ul>
> {{=form.custom.end}}
>
> The above works and gives me a nice form in the format I was expecting
> but I get a extra "Id" item and I have no idea where that is coming
> from. So I'm wondering if I'm looping through this properly or if
> there is a different way I should be doing this. Here is the
> resulting HTML from the above:
>
> <form action="" enctype="multipart/form-data" method="post">
> <ul>
> <li><label>Moderator Pw</label> <input class="string"
> id="no_table_moderator_pw" name="moderator_pw" type="text" value="" /></li>
>
> <li><label>Room Name</label> <input class="string"
> id="no_table_room_name" name="room_name" type="text" value="" /></li>
> <li><label>Id</label> </li>
> <li><label>Attendee Pw</label> <input class="string"
> id="no_table_attendee_pw" name="attendee_pw" type="text" value="" /></
> li>
> <li><input type="submit" value="Submit" /></li>
> </ul>
> <div class="hidden"><input name="_formkey" type="hidden"
> value="8aa047d2-0f5d-43cc-b146-74720ea09f78" /><input name="_formname"
> type="hidden" value="no_table_create" /></div></form>
>
> I'm not sure if the first or second example is the better way to go
> but it's nice working through the features of web2py. Thanks again
> for the help,
>
> -Keith
>
> On Sep 21, 5:29 pm, mdipierro <[email protected]> wrote:
>
> > You are using low level functionality
>
> > for field in form loops over the tags contained in the <form>..</form>
> > which may or may not have a name. Anyway you are looking for
> > form['_name'].
>
> > I would recommend doing this instead:
>
> > This is my controller:
>
> > def roomcreate():
> > form = SQLFORM.factory(
> > Field('room_name', requires=IS_NOT_EMPTY()),
> > Field('attendee_pw',requires=IS_NOT_EMPTY()),
> > Field('moderator_pw',requires=IS_NOT_EMPTY()),
>
> > Field('welcome_msg',requires=IS_NOT_EMPTY()),formstyle='ul')
>
> > {{=form}}
>
> > On Sep 21, 4:55 pm, Keith <[email protected]> wrote:
>
> > > I'm trying to figure out how to get field name when using FORM in the
> > > controller. I can draw the form input fields or put a label on it,
> > > but can't seem to figure out how to just call the form field name as a
> > > variable in the view. Ideally I'd like to be able to do something
> > > like this in the view:
>
> > > {{ for field in form: }}
> > > <li> <label>{{=field.name}}</label> {{=field}} </li>
> > > {{pass}}
>
> > > This is my controller:
>
> > > def roomcreate():
> > > form = FORM(
> > > INPUT(_name='room_name', requires=IS_NOT_EMPTY()),
> > > INPUT(_name='attendee_pw',
> > > requires=IS_NOT_EMPTY()),
> > > INPUT(_name='moderator_pw',
> > > requires=IS_NOT_EMPTY()),
> > > INPUT(_name='welcome_msg',
> > > requires=IS_NOT_EMPTY()),
> > > INPUT(_type='submit')
>
> > > I've tried wrapping the the INPUT inside of a "LABEL" tag but that
> > > doesn't give me the end result HTML I need. I really need to be able
> > > to call the field itself and field name as separate variables in the
> > > view. I know worst case I can manually create the HTML for the whole
> > > form but I'm trying to learn and figure out if this is possible first
> > > before I do that.
>
> > > Thanks for any help or pointers.
>
> > > -Keith
>
>