Skip to main content

Enhance Chameleon templating engine integration into Plone

Project description


This package enhances the integration of Chameleon in Plone with

In our deployments we have source checkouts (git) which are pulled on updates. This may cause templates to be updated on the next request in running instances, which may cause errors because the associated code was not yet reloaded because the zope instance was not yet rebooted. In order to make that more robust we use Chameleon with eager-loading enabled and auto-reload disabled, so that after an instance is started it will no longer read templates.

These options do not work as expected when using to integrate Chameleon in combination with ViewPageTemplateFile instances. ftw.chameleon contains enhancements for making that work well.


  • zope.pagetemplate is patched on Plone 4 so that it considers the CHAMELEON_RELOAD configuration: when CHAMELEON_RELOAD is disabled it does not trigger a recooking of the template even when it has changed. CHAMELEON_RELOAD is not available in Plone 5 as it already patches zope.pagetemplate to not recook templates unless Plone is run in debug mode.
  • When CHAMELEON_EAGER is enabled, all templates will be cooked on startup. This is done by explicitly cooking all known templates in a separate thread.
  • Fire an event when chameleon compiles templates.
  • Log warnings or raise exceptions when templates are compiled unexpectedly. This helps to pin-point problems with templates which are not cacheable.
  • When CHAMELEON_EAGER is enabled, the templates in portal_skins will be cooked after the first request on the Plone site.


Plone 4.3.x and Plone 5.1.x.


Buildout example for production:

eggs +=
environment-vars +=
    CHAMELEON_CACHE ${buildout:directory}/var/chameleon-cache

Buildout example for development:

eggs +=
environment-vars +=
    CHAMELEON_CACHE ${buildout:directory}/var/chameleon-cache

You need to make sure that the cache-directory exists. This can be done with buildout:

parts += chameleon-cache

directory = ${buildout:directory}/var/chameleon-cache
recipe = collective.recipe.shelloutput
commands =
    cmd1 = mkdir -p ${chameleon-cache:directory}

environment-vars +=
    CHAMELEON_CACHE ${chameleon-cache:directory}

Environment variables

Name Description Values Recommendation
CHAMELEON_EAGER Parse and compile templates on startup. true, false true
CHAMELEON_RELOAD (Plone4 only) Reload templates when they have changed. true, false false
CHAMELEON_CACHE File system cache. Path to cache directory. .../var/chameleon-cache
FTW_CHAMELEON_RECOOK_WARNING Warn when recooking templates. true, false true
FTW_CHAMELEON_RECOOK_EXCEPTION Raise exception when recooking templates. true, false true when using Sentry.

See also the Chameleon documentation.


  1. Fork this repo
  2. Clone your fork
  3. Shell: ln -s development.cfg buildout.cfg
  4. Shell: python
  5. Shell: bin/buildout

Run bin/test to test your changes.

Or start an instance by running bin/instance fg.


1.3.0 (2019-10-01)

  • Add support for Plone 5.1. [mbaechtold]
  • Fix tests for Plone 5.1 [djowett-ftw]
  • Remove CHAMELEON_RELOAD option in Plone 5 as it does not recook templates when running in production mode (which is our only concern). [djowett-ftw]

1.2.0 (2017-12-04)

  • Require < 3.0. [mbaechtold]
  • Append changelog to long description of package [raphael-s]

1.1.2 (2017-06-26)

  • Skip persistent templates in precook_templates() to avoid attempting to operate on a closed ZODB connection. [lgraf]

1.1.1 (2016-11-21)

  • Fix logger name (was ftw.ptcache). [jone]

1.1.0 (2016-10-25)

  • Precook z3c.jbot registered templates. [jone]

1.0.0 (2016-10-03)

  • Initial implementation.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for ftw.chameleon, version 1.3.0
Filename, size File type Python version Upload date Hashes
Filename, size ftw.chameleon-1.3.0.tar.gz (17.8 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page