#####################################
Upgrading from 2.1.x and Django 1.2.x
#####################################

**********************
Upgrading dependencies
**********************

Upgrade both your version of django CMS and Django by running
the following commands.

.. code-block:: bash

    pip install --upgrade django-cms==2.2 django==1.3.1

If you are using django-reversion make sure to have at least
version 1.4 installed

.. code-block:: bash

    pip install --upgrade django-reversion==1.4

Also, make sure that django-mptt stays at a version compatible
with django CMS

.. code-block:: bash

    pip install --upgrade django-mptt==0.5.1

**************************
Updates to ``settings.py``
**************************

The following changes will need to be made in your ``settings.py`` file::

    ADMIN_MEDIA_PREFIX = '/static/admin'
    STATIC_ROOT = os.path.join(PROJECT_PATH, 'static')
    STATIC_URL = "/static/"

.. note::

    These are not django CMS settings.  Refer to the Django documentation on `staticfiles`_ for more information.

.. _staticfiles: http://readthedocs.org/docs/django/en/latest/ref/contrib/staticfiles.html

.. note::

    Please make sure the ``static`` sub-folder exists in your
    project and is writeable.

.. note::

    PROJECT_PATH is the absolute path to your project.

**Remove** the following from ``TEMPLATE_CONTEXT_PROCESSORS``:

    django.core.context_processors.auth

**Add** the following to ``TEMPLATE_CONTEXT_PROCESSORS``::

    django.contrib.auth.context_processors.auth
    django.core.context_processors.static
    sekizai.context_processors.sekizai

**Remove** the following from ``MIDDLEWARE_CLASSES``::

    cms.middleware.media.PlaceholderMediaMiddleware

**Remove** the following from :setting:`django:INSTALLED_APPS`::

    publisher

**Add** the following to :setting:`django:INSTALLED_APPS`::

    sekizai
    django.contrib.staticfiles

****************
Template Updates
****************

Make sure to add sekizai tags and ``cms_toolbar`` to your CMS templates.

.. note::

  ``cms_toolbar`` is only needed if you wish to use the front-end editing.  See :ref:`backwards-incompatible-changes` for more information

Here is a simple example for a base template called ``base.html``:

.. code-block:: html+django

  {% load cms_tags sekizai_tags %}
  <html>
    <head>
        {% render_block "css" %}
    </head>
    <body>
        {% cms_toolbar %}
        {% placeholder base_content %}
        {% block base_content%}{% endblock %}
        {% render_block "js" %}
    </body>
  </html>

****************
Database Updates
****************

Run the following commands to upgrade your database

.. code-block:: bash

    python manage.py syncdb
    python manage.py migrate

************
Static Media
************

Add the following to ``urls.py`` to serve static media when developing::

    if settings.DEBUG:
        urlpatterns = patterns('',
        re_path(r'^media/(?P<path>.*)$', 'django.views.static.serve',
                {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
        re_path(r'', include('django.contrib.staticfiles.urls')),
    ) + urlpatterns

Also run this command to collect static files into your :setting:`django:STATIC_ROOT`::

    python manage.py collectstatic
