Hmm, works when I try it. Can you show the full controller code you have now?
On Monday, March 12, 2012 2:46:57 PM UTC-4, Sushant Taneja wrote: > > The rendered form is as: > > <form action="" enctype="multipart/form-data" method="post"> > ... > </form> > > It has no attribute id. > > On Tuesday, March 13, 2012 12:05:02 AM UTC+5:30, Anthony wrote: >> >> 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 >>>>>>> >>>>>>