What's not working? When you view the HTML code of the rendered page in the browser, is the id not there, or is it just that some client-side CSS or JS isn't working as expected? If the latter, the problem could be that you have put the form beginning and ending code inside the <table></table> tags rather than outside, where they belong. Should be:
{{=login_form.custom.begin}} <table> [snip] </table> {{=login_form.custom.end}} Anthony On Monday, March 12, 2012 2:07:20 PM UTC-4, Sushant Taneja wrote: > > Hi, > > I tried both but none seems to be working. Here's my view code: > > <div id="formContainer"> > <table> > {{=login_form.custom.begin}} > <tr> > <td > colspan='2'>{{=login_form.custom.widget.email}}</td> > </tr> > <tr> > <td > colspan='2'>{{=login_form.custom.widget.password}}</td> > </tr> > <tr> > <td><a href="#" id="flipToRecover" > class="flipLink">Forgot Password?</a></td> > <td>{{=login_form.custom.submit}}</td> > </tr> > {{=login_form.custom.end}} > </table> > > Please suggest. > > On Monday, March 12, 2012 11:32:04 PM UTC+5:30, Anthony wrote: >> >> That should work. Can you show the view code? Also, note you can just do: >> >> login_form['_id'] = 'login' >> >> Anthony >> >> On Monday, March 12, 2012 1:19:45 PM UTC-4, Sushant Taneja wrote: >>> >>> I tried customizing the form. I have to set the id of the form element >>> to login. >>> To achieve the above I used the following statement in controller: >>> >>> login_form = auth.login() >>> >>> # Configure form properties >>> login_form.attributes['_id']='login' >>> >>> But it's not working. The generated form does not contain any id >>> attribute. >>> Is there another way to do it ? >>> >>> Thanks, >>> Sushant >>> >>> On Monday, March 12, 2012 8:01:33 PM UTC+5:30, Sushant Taneja wrote: >>>> >>>> Thanks for an explanatory answer. >>>> I will try this out. >>>> >>>> On Monday, March 12, 2012 7:49:28 PM UTC+5:30, Anthony wrote: >>>>> >>>>> def index(): >>>>>> >>>>>> login_form = auth.login() >>>>>> if login_form.process(session=None,formname='login').accepted: >>>>>> pass >>>>>> elif login_form.errors: >>>>>> response.write(request.vars) >>>>>> return dict() >>>>>> >>>>>> to display the form I have used the SQLForm in HTML technique as >>>>>> mentioned in the web2py book >>>>>> >>>>>> Whenever user enters the correct email and password. auth_event >>>>>> registers a login event with the description *User 1 Logged In*. >>>>>> The next property redirects the URL to /user/profile but auth.user >>>>>> object is *None.* >>>>>> >>>>> >>>>> auth.login() handles it's own form processing, and it uses the session >>>>> when calling form.accepts (which adds a hidden _formkey field to the >>>>> form, >>>>> which must be present upon form submission). In your code, you do not >>>>> return the form object to the view, which means your view cannot include >>>>> the hidden _formkey field, which is therefore not submitted with the >>>>> form. >>>>> So, when the form is submitted, the form.accepts in auth.login() fails, >>>>> which means the user object is never stored in session.auth.user -- >>>>> hence, >>>>> auth.user is None. The reason the login submission is successful is that >>>>> your index() function then does its own processing of the login form, >>>>> which >>>>> is successful -- but your explicit call to login_form.process() does not >>>>> do >>>>> anything to set auth.user, so it is never set. >>>>> >>>>> In short, you should not be doing your own processing of the login >>>>> form -- let auth.login() handle that. And if you want to customize the >>>>> form >>>>> display in the view, you still have to return the form to the view so you >>>>> can include the hidden _formkey and _formname fields in the form (you can >>>>> use form.custom.end to do that). >>>>> >>>>> Anthony >>>>> >>>> >> On Monday, March 12, 2012 1:19:45 PM UTC-4, Sushant Taneja wrote: >>> >>> I tried customizing the form. I have to set the id of the form element >>> to login. >>> To achieve the above I used the following statement in controller: >>> >>> login_form = auth.login() >>> >>> # Configure form properties >>> login_form.attributes['_id']='login' >>> >>> But it's not working. The generated form does not contain any id >>> attribute. >>> Is there another way to do it ? >>> >>> Thanks, >>> Sushant >>> >>> On Monday, March 12, 2012 8:01:33 PM UTC+5:30, Sushant Taneja wrote: >>>> >>>> Thanks for an explanatory answer. >>>> I will try this out. >>>> >>>> On Monday, March 12, 2012 7:49:28 PM UTC+5:30, Anthony wrote: >>>>> >>>>> def index(): >>>>>> >>>>>> login_form = auth.login() >>>>>> if login_form.process(session=None,formname='login').accepted: >>>>>> pass >>>>>> elif login_form.errors: >>>>>> response.write(request.vars) >>>>>> return dict() >>>>>> >>>>>> to display the form I have used the SQLForm in HTML technique as >>>>>> mentioned in the web2py book >>>>>> >>>>>> Whenever user enters the correct email and password. auth_event >>>>>> registers a login event with the description *User 1 Logged In*. >>>>>> The next property redirects the URL to /user/profile but auth.user >>>>>> object is *None.* >>>>>> >>>>> >>>>> auth.login() handles it's own form processing, and it uses the session >>>>> when calling form.accepts (which adds a hidden _formkey field to the >>>>> form, >>>>> which must be present upon form submission). In your code, you do not >>>>> return the form object to the view, which means your view cannot include >>>>> the hidden _formkey field, which is therefore not submitted with the >>>>> form. >>>>> So, when the form is submitted, the form.accepts in auth.login() fails, >>>>> which means the user object is never stored in session.auth.user -- >>>>> hence, >>>>> auth.user is None. The reason the login submission is successful is that >>>>> your index() function then does its own processing of the login form, >>>>> which >>>>> is successful -- but your explicit call to login_form.process() does not >>>>> do >>>>> anything to set auth.user, so it is never set. >>>>> >>>>> In short, you should not be doing your own processing of the login >>>>> form -- let auth.login() handle that. And if you want to customize the >>>>> form >>>>> display in the view, you still have to return the form to the view so you >>>>> can include the hidden _formkey and _formname fields in the form (you can >>>>> use form.custom.end to do that). >>>>> >>>>> Anthony >>>>> >>>>