All pastes #930760 Raw Edit

Something

public text v1 · immutable
·published 2008-03-06 20:32 UTC
rendered paste body
I just want a way to have parameterizable re-usable blocks of html. However, these "blocks" must be python object (I want to store them in the ZODB, so it must not be macros, which are ZPT-only dialect), they will reference template files, of course.

I tried using ViewPageTemplateFile this way:

blocks = [ViewPageTemplateFile('templates/block.pt'),ViewPageTemplateFile('templates/block_another.pt')]

then, in my view class I have a method:

def renderHTMLWidgets(self):
     for wdgt in self.blocks
         return wdgt.__call__(self.context,self.request)

in the template file:

<div tal:content="python: view.renderHTMLWidgets()"></div>

It works, the html is rendered, the ZPT is evaluated first. Cool. However, I didn't find a way to do something like:

vars = {text:"Hello World"}
blocks = [ViewPageTemplateFile('templates/block.pt',vars)]

In other words, pass vars to the template. This would work pretty much the same way Rails' partials work.

It would be a light alternative to viewlets - wouldn't require any ZCML registration and would allow to create more general HTML widgets.

What I would like to know is how would be the best way to pass vars to the template? Should I create a subclass of ViewPageTemplateFile? Is there already something like this "partial" thing in Plone/Zope 2/Zope 3?