On Apr 16, 2010, at 6:47 PM, mdipierro wrote:
> I am readying your question and my answer again and I said something
> silly. You should be able to do what you originally proposed
>
> {{extend request.layout}} although I'd probably do {{extend
> reponse.layout}} instead. I tried and both work for me (unless the app
> is bytecode compiled). If the app is bytecode compiled dynamical
> extend and imports are not supported.
That sounds like what I'm seeing. The failure (traceback below) happens during
the compile itself.
The exception is raised during the eval in parse_template:
# check whether it extends a layout
while 1:
match = re_extend.search(text)
if not match:
break
t = os.path.join(path, eval(match.group('name'), context))
try:
fp = open(t, 'rb')
Perhaps the eval should be in a try, to make the error reporting a little more
explicit? Otherwise it's a little confusing for code that works normally to
crash a compile.
>
> Massimo
>
> On Apr 16, 8:09 pm, Jonathan Lundell <[email protected]> wrote:
>> On Apr 16, 2010, at 5:13 PM, mdipierro wrote:
>>
>>> Not quite.
>>
>>> {{extend name}} without quote is supported by name has to be a
>>> variable containing the name of the template. This allows to have
>>> templates determined dynamically based on user for example.
>>
>> So instead of {{extend request.layout}}, what?
>>
>> Can I do:
>>
>> {{layout = request.layout}}
>> {{extend layout}}
>>
>> ?
>>
>> Note that {{extend request.layout}} works fine in normal operation. It only
>> breaks when I try to compile the app, because request isn't defined for the
>> eval().
>>
>>
>>
>>> On Apr 16, 5:24 pm, Jonathan Lundell <[email protected]> wrote:
>>>> On Apr 16, 2010, at 2:11 PM, Jonathan Lundell wrote:
>>
>>>>> I have several questions regarding app compiles, but the first one is
>>>>> this:
>>
>>>>> Error traceback
>>>>> 1.
>>>>> 2.
>>>>> 3.
>>>>> 4.
>>>>> 5.
>>>>> 6.
>>>>> 7.
>>>>> 8.
>>>>> 9.
>>>>> 10.
>>>>> 11.
>>>>> 12.
>>>>> 13.
>>>>> 14.
>>>>> 15.
>>>>> 16.
>>>>> 17.
>>>>> 18.
>>>>> 19.
>>>>> Traceback (most recent call last):
>>>>> File "/Users/jlundell/VTC/vpeps-web2py/web2py/gluon/restricted.py",
>>>>> line 173, in restricted
>>>>> exec ccode in environment
>>>>> File
>>>>> "/Users/jlundell/VTC/vpeps-web2py/web2py/applications/admin/controllers/default.py",
>>>>> line 1061, in <module>
>>>>> File "/Users/jlundell/VTC/vpeps-web2py/web2py/gluon/globals.py", line
>>>>> 96, in <lambda>
>>>>> self._caller = lambda f: f()
>>>>> File
>>>>> "/Users/jlundell/VTC/vpeps-web2py/web2py/applications/admin/controllers/default.py",
>>>>> line 213, in compile_app
>>>>> c = app_compile(request.args[0], request)
>>>>> File "/Users/jlundell/VTC/vpeps-web2py/web2py/gluon/admin.py", line
>>>>> 141, in app_compile
>>>>> compile_application(folder)
>>>>> File "/Users/jlundell/VTC/vpeps-web2py/web2py/gluon/compileapp.py",
>>>>> line 520, in compile_application
>>>>> compile_views(folder)
>>>>> File "/Users/jlundell/VTC/vpeps-web2py/web2py/gluon/compileapp.py",
>>>>> line 293, in compile_views
>>>>> data = parse_template(file, path)
>>>>> File "/Users/jlundell/VTC/vpeps-web2py/web2py/gluon/template.py", line
>>>>> 139, in parse_template
>>>>> t = os.path.join(path, eval(match.group('name'), context))
>>>>> File "<string>", line 1, in <module>
>>>>> NameError: name 'request' is not defined
>>>>> The match in question is presumably {{extend request.layout}}, right?
>>
>>>> OK, that's what I changed. Because I was experimenting with layouts, I
>>>> changed {{extend 'layout.html'}} to {{extend request.layout}}, which I
>>>> assumed would work because request appears to be defined in views. But
>>>> it's not defined in the context of the extend logic's eval().
>>
>>>> It seems like a reasonable thing to be able to do....
>>
>>>> --
>>>> Subscription settings:http://groups.google.com/group/web2py/subscribe?hl=en