Hi folks, I have not built enough pylons to be know how to switch templating languages beyond mako and genshi, but I'm interested in using Chameleon. Has anyone got any examples up of what one needs to do to use Chameleon?
I am using pylons with SimpleTAL (ZPT implementation) templating and what I
did to wire it in to pylons was just follow the existing patterns
established by Mako and Genshi. Basically, in the *lib* package I created a
template.py module and a *render_simpletal* function within it which takes a
template, the caching options, and any other params particular to the
templating engine and return the result of a call to pylon's *
cached_template* function. *cached_template* takes the inner function named
*render_template* as a parameter and this is the function you need to
implement. Basically just use the template's API to render a given template
and return it from this inner function.
> Hi folks, I have not built enough pylons to be know how to switch
> templating languages beyond mako and genshi, but I'm interested in using
> Chameleon. Has anyone got any examples up of what one needs to do to use
> Chameleon?
> thanks
> Iain
-- Never take life seriously. Nobody gets out alive anyway.
> Hi folks, I have not built enough pylons to be know how to switch > templating languages beyond mako and genshi, but I'm interested in using > Chameleon. Has anyone got any examples up of what one needs to do to use > Chameleon?
In config/environment.py:
from genshi.template import TemplateLoader as GenshiTemplateLoader
On Sat, 2009-09-19 at 09:40 +0200, Wichert Akkerman wrote: > On 2009-9-16 21:06, Iain Duncan wrote:
> > Hi folks, I have not built enough pylons to be know how to switch > > templating languages beyond mako and genshi, but I'm interested in using > > Chameleon. Has anyone got any examples up of what one needs to do to use > > Chameleon?
> In config/environment.py:
> from genshi.template import TemplateLoader as GenshiTemplateLoader
> you can then use render_pt to render html/xml templates, and render_text > to render text templates, exactly like you use other templating languages.
create a template object, which attach to app_globals in
config/envrionment.py, then
create a render function, using pylons_globals() and cached_template()
functions,
all after, add it to app_globals to render the template by using template
lookup method.
> Wichert, thank you so much for your explicit example! I'll try that out
> this week. =)
> Iain
> On Sat, 2009-09-19 at 09:40 +0200, Wichert Akkerman wrote:
> > On 2009-9-16 21:06, Iain Duncan wrote:
> > > Hi folks, I have not built enough pylons to be know how to switch
> > > templating languages beyond mako and genshi, but I'm interested in
> using
> > > Chameleon. Has anyone got any examples up of what one needs to do to
> use
> > > Chameleon?
> > In config/environment.py:
> > from genshi.template import TemplateLoader as GenshiTemplateLoader
> > you can then use render_pt to render html/xml templates, and render_text
> > to render text templates, exactly like you use other templating
> languages.
In Sat, 2009-09-19 at 09:40 +0200, Wichert Akkerman wrote:
> On 2009-9-16 21:06, Iain Duncan wrote:
> > Hi folks, I have not built enough pylons to be know how to switch > > templating languages beyond mako and genshi, but I'm interested in using > > Chameleon. Has anyone got any examples up of what one needs to do to use > > Chameleon?
Thanks Wichert, I've hit some problems here, and muddled along a bit, if you ( or someone ) can check this that would be great.
> In config/environment.py:
> from genshi.template import TemplateLoader as GenshiTemplateLoader
> you can then use render_pt to render html/xml templates, and render_text > to render text templates, exactly like you use other templating languages.
I copied the above in, and imported render_pt from lib/pt.py, but when I try to render a template like so:
(in a controller) def zpt(self): "test of using zpt templates" return render_pt("mytemplate.pt")
I get the following traceback, any help much appreciated.
File '/home/ymh/pylons_full/pylons_full/controllers/peek.py', line 50 in zpt
File '/home/ymh/pylons_full/pylons_full/lib/pt.py', line 15 in render_pt cache_key=cache_key, cache_type=cache_type, cache_expire=cache_expire) File '/home/ymh/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/templa ting.py', line 249 in cached_template return render_func() File '/home/ymh/pylons_full/pylons_full/lib/pt.py', line 11 in render_template template = globs["app_globals"].pt_loader.load(template_name) File '/home/ymh/lib/python2.5/site-packages/chameleon.zpt-1.0.0-py2.5.egg/chamel eon/zpt/loader.py', line 11 in load template.PageTemplateFile) File '/home/ymh/lib/python2.5/site-packages/chameleon.core-1.0.0-py2.5.egg/chame leon/core/loader.py', line 8 in load self.registry[args] = template = func(self, *args) File '/home/ymh/lib/python2.5/site-packages/chameleon.core-1.0.0-py2.5.egg/chame leon/core/loader.py', line 39 in load path, self.parser, auto_reload=self.auto_reload) TypeError: __init__() takes exactly 2 non-keyword arguments (3 given)
> In Sat, 2009-09-19 at 09:40 +0200, Wichert Akkerman wrote: >> On 2009-9-16 21:06, Iain Duncan wrote:
>>> Hi folks, I have not built enough pylons to be know how to switch >>> templating languages beyond mako and genshi, but I'm interested in using >>> Chameleon. Has anyone got any examples up of what one needs to do to use >>> Chameleon?
> Thanks Wichert, I've hit some problems here, and muddled along a bit, if > you ( or someone ) can check this that would be great.
>> In config/environment.py:
>> from genshi.template import TemplateLoader as GenshiTemplateLoader
Doh, that line should have read:
from chameleon.genshi.loader import TemplateLoader
> I assume I'm also supposed to add??
> from chameleon.zpt.loader import TemplateLoader
That depends. Personally I use chameleon.genshi since I prefer Genshi syntax over zpt. If you want to use the Zope page template syntax you'll want to replace chameleon.zpt.
>> you can then use render_pt to render html/xml templates, and render_text >> to render text templates, exactly like you use other templating languages.
> I copied the above in, and imported render_pt from lib/pt.py, but when I > try to render a template like so:
> (in a controller) > def zpt(self): > "test of using zpt templates" > return render_pt("mytemplate.pt")
> I get the following traceback, any help much appreciated.
> File '/home/ymh/pylons_full/pylons_full/controllers/peek.py', line 50 in > zpt
> File '/home/ymh/pylons_full/pylons_full/lib/pt.py', line 15 in render_pt > cache_key=cache_key, cache_type=cache_type, cache_expire=cache_expire) > File > '/home/ymh/lib/python2.5/site-packages/Pylons-0.9.7-py2.5.egg/pylons/templa ting.py', line 249 in cached_template > return render_func() > File '/home/ymh/pylons_full/pylons_full/lib/pt.py', line 11 in > render_template > template = globs["app_globals"].pt_loader.load(template_name) > File > '/home/ymh/lib/python2.5/site-packages/chameleon.zpt-1.0.0-py2.5.egg/chamel eon/zpt/loader.py', line 11 in load > template.PageTemplateFile) > File > '/home/ymh/lib/python2.5/site-packages/chameleon.core-1.0.0-py2.5.egg/chame leon/core/loader.py', line 8 in load > self.registry[args] = template = func(self, *args) > File > '/home/ymh/lib/python2.5/site-packages/chameleon.core-1.0.0-py2.5.egg/chame leon/core/loader.py', line 39 in load > path, self.parser, auto_reload=self.auto_reload) > TypeError: __init__() takes exactly 2 non-keyword arguments (3 given)
Hm, the chameleon.zpt template has not seen as much love as the chameleon.genshi version so it might have broken somewhere. Can you test if chameleon.genshi works for you? If so I'll look at fixing up the chameleon.zpt version.
Wichert.
-- Wichert Akkerman <wich...@wiggy.net> It is simple to make things. http://www.wiggy.net/ It is hard to make things simple.
On Wed, Sep 16, 2009 at 12:06 PM, Iain Duncan <iaindun...@telus.net> wrote:
> Hi folks, I have not built enough pylons to be know how to switch > templating languages beyond mako and genshi, but I'm interested in using > Chameleon. Has anyone got any examples up of what one needs to do to use > Chameleon?
What is Chameleon anyway? I googled and found this http://www.interfaceware.com/manual/chameleon.html "Welcome to Chameleon, an intuitive and easy-to-use software tool for adding industry-standard message capabilities to new or existing healthcare applications."
> On Wed, Sep 16, 2009 at 12:06 PM, Iain Duncan <iaindun...@telus.net> wrote:
> > Hi folks, I have not built enough pylons to be know how to switch
> > templating languages beyond mako and genshi, but I'm interested in using
> > Chameleon. Has anyone got any examples up of what one needs to do to use
> > Chameleon?
> What is Chameleon anyway? I googled and found thishttp://www.interfaceware.com/manual/chameleon.html > "Welcome to Chameleon, an intuitive and easy-to-use software tool for
> adding industry-standard message capabilities to new or existing
> healthcare applications."
> So it's a template engine unifier, the way Buffet was and render_* > are. It also claims to be faster than the native engines ported to > it?
Yes, it compiles both genshi and zpt templates to bytecode. That's about all I know! chameleon.zpt is the out-of-the-box template standard for repoze.bfg apps
> So it's a template engine unifier, the way Buffet was and render_* > are. It also claims to be faster than the native engines ported to > it?
If I remember correctly Buffet was a wrapper around template engines, which provided a common API for rendering templates. Chameleon is something different: it is a template rendering engine with frontends for handling Zope page templates and Genshi syntax. You could compare it to gcc with its different frontends for C, C++, Fortran, etc. It is a lot faster than the original implementations. From what I remember it is about 10-14 times faster than the original implementations for both with the bigtable benchmark, which puts it in the same ballpark as Mako.
Wichert.
-- Wichert Akkerman <wich...@wiggy.net> It is simple to make things. http://www.wiggy.net/ It is hard to make things simple.
> Hm, the chameleon.zpt template has not seen as much love as the > chameleon.genshi version so it might have broken somewhere. Can you test > if chameleon.genshi works for you? If so I'll look at fixing up the > chameleon.zpt version.
Thanks, Chameleon genshi is working with your correction. Is the plan for chameleon to eventually be able to support both genshi and tal attributes at the same time or will it always be an either or?
I also like genshi syntax a lot, so I'm just happy to use a fast genshi, but it seems like there are some nice extras in the tal world as well.
> Hm, the chameleon.zpt template has not seen as much love as the > chameleon.genshi version so it might have broken somewhere. Can you test > if chameleon.genshi works for you? If so I'll look at fixing up the > chameleon.zpt version.
I've got the genshi templates being rendered, but I don't seem to be able to use HTML() or XML() to unescape html tags if the values being injected into the template are xhtml. Can anyone tell me what I need to do to display HTML properly within a genshi template rendered by chameleon, or why the HMTL function is not available?
>> Hm, the chameleon.zpt template has not seen as much love as the >> chameleon.genshi version so it might have broken somewhere. Can you test >> if chameleon.genshi works for you? If so I'll look at fixing up the >> chameleon.zpt version.
> I've got the genshi templates being rendered, but I don't seem to be > able to use HTML() or XML() to unescape html tags if the values being > injected into the template are xhtml. Can anyone tell me what I need to > do to display HTML properly within a genshi template rendered by > chameleon, or why the HMTL function is not available?
Same system as Mako uses: it checks for a __html__ method. If you use pylons that means you can use webhelpers.html.literal to indicate a string should not be escaped. For example:
>> Hm, the chameleon.zpt template has not seen as much love as the >> chameleon.genshi version so it might have broken somewhere. Can you test >> if chameleon.genshi works for you? If so I'll look at fixing up the >> chameleon.zpt version.
> Thanks, Chameleon genshi is working with your correction. Is the plan > for chameleon to eventually be able to support both genshi and tal > attributes at the same time or will it always be an either or?
My correction was in chameleon.zpt. chameleon.genshi has always had a working template loader.
As far as I know there are no plans to support both Genshi and Page Template syntax in the same file, and I have to admit that I personally do not see any real benefits to doing that. chameleon.zpt does go a little bit beyond the official zpt standards though: it also supports ${...} expansions, similar to Genshi templates.
Wichert.
-- Wichert Akkerman <wich...@wiggy.net> It is simple to make things. http://www.wiggy.net/ It is hard to make things simple.
> >> Hm, the chameleon.zpt template has not seen as much love as the
> >> chameleon.genshi version so it might have broken somewhere. Can you test
> >> if chameleon.genshi works for you? If so I'll look at fixing up the
> >> chameleon.zpt version.
> > Thanks, Chameleon genshi is working with your correction. Is the plan
> > for chameleon to eventually be able to support both genshi and tal
> > attributes at the same time or will it always be an either or?
> My correction was in chameleon.zpt. chameleon.genshi has always had a
> working template loader.
> As far as I know there are no plans to support both Genshi and Page
> Template syntax in the same file, and I have to admit that I personally
> do not see any real benefits to doing that. chameleon.zpt does go a
> little bit beyond the official zpt standards though: it also supports
> ${...} expansions, similar to Genshi templates.
> Wichert.
> --
> Wichert Akkerman <wich...@wiggy.net> It is simple to make things.http://www.wiggy.net/ It is hard to make things simple.
I was just playing with this and it seems that the genshi syntax is
somewhat limited. Is that correct?
And even though I know it's not good practice to do the whole <?
python ?> thing, chameleon seems to blow up on this as well.
I don't know if I would call these bugs necessarily, but it would be
nice if there was something explicit stating that the syntax isn't
fully supported. Other than that, when it works, man is it fast.
> On Sep 26, 10:14 am, Wichert Akkerman<wich...@wiggy.net> wrote: >> On 2009-9-25 22:55, Iain Duncan wrote:
>>>> Hm, the chameleon.zpt template has not seen as much love as the >>>> chameleon.genshi version so it might have broken somewhere. Can you test >>>> if chameleon.genshi works for you? If so I'll look at fixing up the >>>> chameleon.zpt version.
>>> Thanks, Chameleon genshi is working with your correction. Is the plan >>> for chameleon to eventually be able to support both genshi and tal >>> attributes at the same time or will it always be an either or?
>> My correction was in chameleon.zpt. chameleon.genshi has always had a >> working template loader.
>> As far as I know there are no plans to support both Genshi and Page >> Template syntax in the same file, and I have to admit that I personally >> do not see any real benefits to doing that. chameleon.zpt does go a >> little bit beyond the official zpt standards though: it also supports >> ${...} expansions, similar to Genshi templates.
>> Wichert.
>> -- >> Wichert Akkerman<wich...@wiggy.net> It is simple to make things.http://www.wiggy.net/ It is hard to make things simple.
> I was just playing with this and it seems that the genshi syntax is > somewhat limited. Is that correct?
That tutorial does not work due to a limitation chameleon.genshi currently has: match templates defined in included templates are not applied to the calling document. That is documented at http://pypi.python.org/pypi/chameleon.genshi. If enough people ask Malthe if he can add support for that might be fixed :)
Wichert.
-- Wichert Akkerman <wich...@wiggy.net> It is simple to make things. http://www.wiggy.net/ It is hard to make things simple.
On Sat, Sep 26, 2009 at 3:26 PM, Wichert Akkerman <wich...@wiggy.net> wrote:
> On 2009-9-26 21:10, Thomas G. Willis wrote:
>> On Sep 26, 10:14 am, Wichert Akkerman<wich...@wiggy.net> wrote:
>>> On 2009-9-25 22:55, Iain Duncan wrote:
>>>>> Hm, the chameleon.zpt template has not seen as much love as the
>>>>> chameleon.genshi version so it might have broken somewhere. Can you test
>>>>> if chameleon.genshi works for you? If so I'll look at fixing up the
>>>>> chameleon.zpt version.
>>>> Thanks, Chameleon genshi is working with your correction. Is the plan
>>>> for chameleon to eventually be able to support both genshi and tal
>>>> attributes at the same time or will it always be an either or?
>>> My correction was in chameleon.zpt. chameleon.genshi has always had a
>>> working template loader.
>>> As far as I know there are no plans to support both Genshi and Page
>>> Template syntax in the same file, and I have to admit that I personally
>>> do not see any real benefits to doing that. chameleon.zpt does go a
>>> little bit beyond the official zpt standards though: it also supports
>>> ${...} expansions, similar to Genshi templates.
>>> Wichert.
>>> --
>>> Wichert Akkerman<wich...@wiggy.net> It is simple to make things.http://www.wiggy.net/ It is hard to make things simple.
>> I was just playing with this and it seems that the genshi syntax is
>> somewhat limited. Is that correct?
> That tutorial does not work due to a limitation chameleon.genshi
> currently has: match templates defined in included templates are not
> applied to the calling document. That is documented at
> http://pypi.python.org/pypi/chameleon.genshi. If enough people ask
> Malthe if he can add support for that might be fixed :)
> Wichert.
> --
> Wichert Akkerman <wich...@wiggy.net> It is simple to make things.
> http://www.wiggy.net/ It is hard to make things simple.
Yes I saw that match templates are not applied, but for some reason I
was thinking that meant "are ignored" not "causes things to blow up".
So I wasn't sure whether other things were fuxored on my machine that
might be causing this.
But that's neither here nor there. I can work around these things if
it means "super fast templates" I was just curious about it. Thanks
for the clarification.
> That tutorial does not work due to a limitation chameleon.genshi > currently has: match templates defined in included templates are not > applied to the calling document. That is documented at > http://pypi.python.org/pypi/chameleon.genshi. If enough people ask > Malthe if he can add support for that might be fixed :)
Sorry if I'm being dumb here, but I'm confused by the above. Does this mean that one can't use a master and derived templates setup with match templates? That would seem to be a big limitation, but maybe I am doing this wrong. Can you tell me how you handle template inheritance or master templates with chameleon.genshi?
>> That tutorial does not work due to a limitation chameleon.genshi >> currently has: match templates defined in included templates are not >> applied to the calling document. That is documented at >> http://pypi.python.org/pypi/chameleon.genshi. If enough people ask >> Malthe if he can add support for that might be fixed :)
> Sorry if I'm being dumb here, but I'm confused by the above. Does this > mean that one can't use a master and derived templates setup with match > templates? That would seem to be a big limitation, but maybe I am doing > this wrong. Can you tell me how you handle template inheritance or > master templates with chameleon.genshi?
> thanks > Iain
That's what I took it to mean.
Another way to get the same effect is to use something like deliverance or repoze.tempita which is why I wasn't too worried about it.
For anyone who finds this thread and is looking for these directions
in the context of a Pylons project (what to change where),
I put together a little tutorial/recipe showing what needs to be
changed in the Pylons' QuickWiki project
so it can use chameleon.zpt (there's a tutorial for building QuickWiki
with Mako templates on the Pylons website
that I'd recommend following first).