[Zope] How to use ZPT with ad-hoc context?

Daniel Dekany ddekany at freemail.hu
Mon May 4 11:35:35 EDT 2009


Monday, May 4, 2009, 11:59:21 AM, Hedley Roos wrote:

 > Daniel Dekany wrote:
 >> How to create a template context ("here" inside ZPT) that is not an
 >> object from the ZODB, just a temporary object? This is what I tried:
 >>
 >> class AdhocContext(Implicit):
 >>     pt = PageTemplateFile("whatever/path",  globals())
 >>     ...
 >>
 >> MyZopeProduct:
 >>
 >>   def whatever(self):
 >>         "Test"
 >>         ctx = AdhocContext().__of__(self)
 >>         return ctx.pt()
 >>
 >> The problem I have with this is that I can't access anything in
 >> AdhocContext from the ZPT because the security manager blocks it (I
 >> didn't forget to security.declarePublic + document what I wanted to
 >> access). Is there a simple trick to solve this? (BTW, I will need to
 >> invoke some Plone macros from that ZPT too... I hope that will just
 >> work if this security matter is solved.)
 >>
>
>
> You don't have to create the page template as an attribute of a class.
> You can declare it as a local variable
>
> pt = ZopeTwoPageTemplateFile('template.pt')
>
> and then do
>
> extra_context = {'context': some_context}
> html = pt.pt_render(extra_context=extra_context)
>
> The context variable in your template will then be what you want it to be.

For some reason doing that results in "'str' object is not callable"
error... but I didn't dig into it much, as using the pt as attribute
of the context class is not an issue for me.

> If you still encounter security problems then add this line directly 
> after you declare class AdhocContext
>
> __allow_access_to_unprotected_subobjects__ = 1

That indeed works, thanks!

> You probably should not use that line too often :)

I would prefer doing it correctly/safely, but is there a way? Because
it even exposes the unprotected subobjects of the acquired objects...
sounds a bit scary to me.

> Hedley
>
> _______________________________________________
> Zope maillist  -  Zope at zope.org
> http://mail.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists - 
>  http://mail.zope.org/mailman/listinfo/zope-announce
>  http://mail.zope.org/mailman/listinfo/zope-dev )

-- 
Best regards,
 Daniel Dekany



More information about the Zope mailing list