The entire template is parsed (including all of the "include" directives) before any template Python code is run, so the include directives cannot include variables defined in the template itself. The code that comes right after the "include" is eval'ed in the view environment, which includes the web2py global environement, plus any variables defined in the model files or returned in the dict of the controller action. So, as you have observed, you can include variables in the "include" directive, but they must be defined in the models or controller, not in the view itself.
Basically, "include" and "extend" are template system directives, not Python code, so they are processed when the template is parsed (into Python code), not when the parsed template is finally executed. Also, keep in mind that if you're "include" and "extend" files are determined dynamically at runtime using variables to determine the filenames, then you will not be able to compile the views (which obviously must be compiled prior to runtime, when the filenames will not be known). Anthony On Thursday, August 1, 2013 8:45:40 AM UTC-4, David Marko wrote: > > I'm trying to use include in 'for' statement importing left navigation > snippets from separate folders for particular modules. Code is very simple > as below. But it fails on line with include saying that 'm' variable doesnt > exist. I tried this and that and found out that include can see variables > specified in models but cant see any variable defined in template ... What > wrong I'm doing? > > {{ for m in app.modules.codes: }} > {{include m+'/left_navig.html' }} > {{pass}} > > -- --- 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.