Hi!

This is somewhat a continuation of Conditional presence of a variable in 
view  <https://groups.google.com/d/topic/web2py/n8jqIXdV1js/discussion>and How 
do Global Variables 
Work?<https://groups.google.com/d/topic/web2py/zt74x2FsssU/discussion>

So, what is recommended way of checking if var is defined and passed to a 
view? 
i.e. avoiding errors
<type 'exceptions.NameError'> name 'foo' is not defined

I see at least 3 ways, one is using 'try ... except' in a view:

{{block content_block}} 
{{try:}} 
{{=message or ""}} 
{{except:}} <h1>Message not defined!</h1> 
{{pass}} 
{{end}}

other, using "if":
{{block content_block}} 
{{if 'message' in globals():}}
{{=message or ""}} 
{{pass}}
{{end}} 

and also we can use globals().get():
{{=globals().get('message', False)}}
which will return False if message was not returned with dict in controller.

Something like this is used in default layout along with "or" that simply 
checks if var is not empty.

And what if I have a lot of variables to return from controller?
Then returning locals seems to be simpler and cleaner way (at least in 
terms of syntax), but on the other hand I really like the idea of passing 
only selected variables (that will be used) to the view, not all I have in 
controller. 
Probably somebody can point out to other security issues with returning 
locals to all views?

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to