I don't think you can do a conditional {{extend}}, can you?
Anthony
On Sunday, October 2, 2011 3:41:46 PM UTC-4, Julie Bouillon wrote:
>
> I've hacked something based on request.env.query_string because it's
> not working
> with the session if the first page visited is a protected one.
>
> Unfortunately, I think I might have found a bug.
>
> Here's an excerpt of the user.html file I use:
> {{if "/appname/contname" in request.env.query_string:}}
> {{extend 'contname-layout.html'}}
> {{else:}}
> {{extend 'layout.html'}}
> {{pass}}
> <h2>{{=T( request.args(0).replace('_',' ').capitalize() )}}</h2>
> ------8<------
>
> When using this version of user.html I have the following error
> (copied from the
> ticket):
>
> 1. Traceback (most recent call last):
> 2. File "/home/julie/prog/zwip/web2py/gluon/restricted.py", line
> 193, in restricted
> 3. ccode = compile2(code,layer)
> 4. File "/home/julie/prog/zwip/web2py/gluon/restricted.py", line
> 179, in compile2
> 5. return compile(code.rstrip().replace('\r\n','\n')+'\n', layer,
> 'exec')
> 6. File "/home/julie/prog/zwip/web2py/applications/zwip/views/
> default/user.html", line 67
> 7. elif left_sidebar_enabled != right_sidebar_enabled:
> width_content='740px'
> 8. ^
> 9. SyntaxError: invalid syntax
> 10.
>
> And at the end of the ticket:
>
> ------8<------
> 60. response.write('\n\n ', escape=False)
> 61. #using sidebars need to know what sidebar you want to use
> 62. #prior of using it, because of static width size of content,
> you can use
> 63. #left_sidebar, right_sidebar, both or none (False left and
> right)
> 64. left_sidebar_enabled =
> globals().get('left_sidebar_enabled',False)
> 65. right_sidebar_enabled =
> globals().get('right_sidebar_enabled',False)
> 66. if left_sidebar_enabled and right_sidebar_enabled:
> width_content='63%'
> 67. elif left_sidebar_enabled != right_sidebar_enabled:
> width_content='740px'
> 68. else: width_content='100%'
> 69. if left_sidebar_enabled: left_sidebar_style = 'style="display:
> block;"'
> ------>8------
>
> It looks like the "else" introduced in the "user.html" is breaking the
> identation
> of the code found in the default "layout.html" after the inclusion of
> "web2py_ajax.html".
>
> Right now, as a workaround, I'm using another layout but I might have
> to also
> add code on my layouts later on and that could become problematic.
>
> If there's a better way of doing I'm all ears.
>
>
>
> On Oct 2, 6:44 pm, Massimo Di Pierro <[email protected]>
> wrote:
> > As a quick solution, store the last visited page in session and check
> > check in user
> >
> > is not request.function == 'user':
> > session.last_action = request.function
> >
> > controller A
> > @auth.requires_login() --> send to a view user.html specific for
> > controller A
> > def myfunctionA():
> > return dict()
> > controller B
> > @auth.requires.login() --> send to the default view user.html
> > def myfunctionB():
> > return dict()
> >
> > def user():
> > # use session.last_action
> > return dict(form=auth())
> >
> > On Oct 2, 2:42 am, Julie Bouillon <[email protected]> wrote:
> >
> >
> >
> >
> >
> >
> >
> > > On 10/02/2011 06:53 AM, Massimo Di Pierro wrote:> How do you know if a
> user that has not yet logged is special or not?
> > > > Can you provide an example?
> >
> > > > On Oct 1, 1:22 pm, "[email protected]"
> > > > <[email protected]> wrote:
> > > >> Hi,
> >
> > > >> Is it possible to define different auth page for the same
> application ? I
> > > >> mean having an auth page for "regular" user and another one for
> "special"
> > > >> user.
> >
> > > >> I tried by adding a user function in a specific controller and added
> a
> > > >> user.html for that controller but whenever an authentication is
> required I'm
> > > >> sent to the default user.html.
> >
> > > I presume the kind of user depending on which view they try to access.
> >
> > > Example:
> >
> > > controller A
> > > @auth.requires_login() --> send to a view user.html specific for
> > > controller A
> > > def myfunctionA():
> > > return dict()
> >
> > > controller B
> > > @auth.requires.login() --> send to the default view user.html
> > > def myfunctionB():
> > > return dict()
> >
> > > I know there is the _next value passed to the user.html view, but
> > > intuitively it feels like a not that good idea to use that... Anything
> > > more elegant than that ?
>