Getting Started

Cubane’s content management system is implemented as a separate app, which is cubane.cms. In order to use it, you would need to load cubane.cms in your project setting’s list of installed apps INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'cubane.cms',
    'myApp',
    ...
]

In addition, your urls.py file need to be changed to include URL patterns for the content management system. The following example adds support for content management as well as robots.txt and sitemap.xml:

from django.conf.urls import url, include
from django.contrib.sitemaps import views as sitemaps_views
from cubane.backend.views import Backend
from cubane.cms.views import get_cms
from cubane.urls import *
from cubane import views as cubane_views

backend = Backend()
cms = get_cms()

setup_default_urls(__name__)

urlpatterns += [
    # admin
    url(r'^admin/', include(backend.urls)),

    # sitemap and robots
    url(r'^sitemap\.xml$', sitemaps_views.sitemap, {'sitemaps': cms.sitemaps}),
    url(r'^robots\.txt$', cubane_views.robots_txt),

    # cms
    url(r'^', include(cms.urls)),
]

A new instance of the content management system is created via:

cms = get_cms()

This is very similar to how the backend system is integrated.

Note

Please note, you can use the function cubane.cms.views.get_cms() whenever you need an instance to the cubane.cms.views.CMS instance. The function will always return the same (shared) instance.

url(r'^', include(cms.urls)),

The url pattern for the content management system is then allowing requests to be dispatched to the CMS system.

Note

The URL pattern include statement for the content management app is catching all request URLs. This means that any pattern that is declared afterwards will never match.

CMS Class

Cubane’s content management system is provided by the cubane.cms.views.CMS class. You need to provide your own class that derives from cubane.cms.views.CMS. Usually you declare such class in your main views.py file for example:

from cubane.cms.views import CMS

class MyCMS(CMS):
    pass

By introducing your own class, you can alter the behaviour of the CMS system by overriding various methods. The CMS class is declared via the Django setting variable CMS for your application in the following way:

CMS = 'myapp.views.MyCMS'

The given string value is referring to the actual class that is used by Cubane for representing the CMS system. The path must include the full path to the class including modules and sub-modules.

Whenever an instance to the CMS class is required, the function cubane.cms.views.get_cms() can be used to return a (shared) instance.

Note

If you need to refer to an instance of your CMS class programmatically in your code, then you can use the function cubane.cms.views.get_cms() to obtain a shared reference.

See also

For more information about how to extend the CMS system, please refer to section CMS System.

CMS Settings

When enabling the content-management system, a settings class needs to be created which will store all site-wide settings.

When creating a new settings class, it needs to be derived from cubane.cms.models.SettingsBase (or cubane.ishop.models.ShopSettings when used together with the shop component of Cubane).

from cubane.cms.models import SettingsBase

class Settings(SettingsBase):
    # TODO: Add additional settings fields here...

    @classmethod
    def get_form(cls):
        from myapp.forms import SettingsForm
        return SettingsForm

You may extend and add your own site-wide settings options to the Settings class. When declaring the corresponding form, the form needs to be extended from cubane.cms.forms.SettingsForm:

from cubane.cms.forms import SettingsForm

class SettingsForm(SettingsForm):
    class Meta:
        model = Settings
        fields = '__all__'

Finally, you need to tell Cubane which class to use for your settings. Declare the Django settings variable CMS_SETTINGS_MODEL in your Django application settings:

CMS_SETTINGS_MODEL = 'myapp.models.Settings'

The given string value is referring to the actual class that is used by Cubane for website-wide settings. The path must include the full path to the class including modules and sub-modules.

Note

A shared reference to the settings instance can be obtained via the CMS instance:

from cubane.cms.views import get_cms

...

cms = get_cms()
print(cms.settings)

If you need to refer to the settings model programmatically in your code, for example in order to declare a foreign key then you can use cubane.cms.views.get_settings_model().