conditional statement in view doesn't prevent "not defined" error

37 views
Skip to first unread message

Alex Glaros

unread,
Feb 4, 2016, 7:46:19 PM2/4/16
to web...@googlegroups.com
I'm trying to avoid an extra DB hit by first checking for records in controller.  I set a "yes" or "no" type flag

But the conditional in the view doesn't care if flag is set to no, it still raises error stating that the set within the conditional is undefined.

Is the only way to get around this is put the isempty check in the view instead of controller?

{{if does_user_have_admin_roles == True:}} <!-- this is view.  The controller defines does_user_have_admin_roles -->
           {{for r in admin_roles:}} 

<type 'exceptions.NameError'> name 'admin_roles' is not defined


also tried: {{if admin_roles:}}

thanks,

Alex Glaros


Anthony

unread,
Feb 4, 2016, 8:00:32 PM2/4/16
to web2py-users
Please check the value of does_user_have_admin_roles -- it must be True when you think it isn't.

Anyway, an alternative is:

{{if 'admin_roles' in globals():}}

Even better, just initialize admin_roles to an empty list and do:

{{for r in admin_roles:}}

The loop will not be executed if the list is empty.

A couple other tips:
  1. In Python, prefer if some_boolean over if some_boolean == True.
  2. When naming a boolean, don't make it sound like a question (e.g., prefer has_admin_roles over does_user_have_admin_roles). This goes with #1 (if has_admin_roles is more appropriate grammatically than if does_user_have_admin_roles).
Anthony


On Thursday, February 4, 2016 at 7:46:19 PM UTC-5, Alex Glaros wrote:
I'm trying to avoid an extra DB hit by first checking for records in controller.  I set a "yes" or "no" type flag

But the conditional in the view doesn't care if flag is set to no, it still raises error stating that the set within the conditional as undefined.

Is the only way to get around this is put the isempty check in the view instead of controller?

{{if does_user_have_admin_roles == True:}}
           {{for r in admin_roles:}} 

Alex Glaros

unread,
Feb 5, 2016, 4:24:06 PM2/5/16
to web2py-users
good catch Anthony, you're right, var was accidentally set to True

thanks

Alex
Reply all
Reply to author
Forward
0 new messages