#####################
How to manage caching
#####################


******
Set-up
******

To setup caching configure a caching backend in django.

Details for caching can be found here: https://docs.djangoproject.com/en/dev/topics/cache/

In your middleware settings be sure to add ``django.middleware.cache.UpdateCacheMiddleware`` at the first and
``django.middleware.cache.FetchFromCacheMiddleware`` at the last position::

    MIDDLEWARE=[
            'django.middleware.cache.UpdateCacheMiddleware',
            ...
            'cms.middleware.language.LanguageCookieMiddleware',
            'cms.middleware.user.CurrentUserMiddleware',
            'cms.middleware.page.CurrentPageMiddleware',
            'cms.middleware.toolbar.ToolbarMiddleware',
            'django.middleware.cache.FetchFromCacheMiddleware',
        ],


Plugins
=======

.. versionadded:: 3.0

Normally all plugins will be cached. If you have a plugin that is dynamic based on the current user or other
dynamic properties of the request set the ``cache=False`` attribute on the plugin class::

    class MyPlugin(CMSPluginBase):
        name = _("MyPlugin")
        cache = False

.. warning::
    If you disable a plugin cache be sure to restart the server and clear the cache afterwards.

Content Cache Duration
======================

Default: 60

This can be changed in :setting:`CMS_CACHE_DURATIONS`

Settings
========

Caching is set default to true.
Have a look at the following settings to enable/disable various caching behaviours:

- :setting:`CMS_PAGE_CACHE`
- :setting:`CMS_PLACEHOLDER_CACHE`
- :setting:`CMS_PLUGIN_CACHE`





