=================================== Integrate with other applications =================================== Delegate the rendering of a page to an application =================================================== By delegating the rendering of a page to another application, you will be able to use customized views and still get all the CMS variables to render a proper navigation. First you need a `urls.py` file that you can register to the CMS. This file might look like this:: from django.conf.urls import url from pages.testproj.documents.views import document_view urlpatterns = [ url(r'^doc-(?P[0-9]+)$', document_view, name='document_details'), url(r'^$', document_view, name='document_root'), ] .. note:: The CMS will pass the keyword arguments `current_page`, `pages_navigation` and `lang` to the view Then you need to register the urlconf module with the CMS to use it within the admin interface. Here is an example for a document application.:: from pages.urlconf_registry import register_urlconf register_urlconf('Documents', 'pages.testproj.documents.urls', label='Display documents') As soon as you have registered your `urls.py`, a new field will appear in the page administration. Choose the `Display documents`. The view used to render this page on the frontend is now choosen by `pages.testproj.documents.urls`. .. note:: The path passed to your urlconf module is the remaining path available after the page slug. Eg: `/pages/page1/doc-1` will become `doc-1`. .. note:: If you want to have the reverse URLs with your delegated application, you will need to include your URLs into your main urls.py, eg:: (r'^pages/', include('pages.urls')), ... (r'^pages/(?P.*)', include('pages.testproj.documents.urls')), Here is an example of a valid view from the documents application:: from django.shortcuts import render from pages.testproj.documents.models import Document def document_view(request, *args, **kwargs): context = dict(kwargs) if kwargs.get('current_page', False): documents = Document.objects.filter(page=kwargs['current_page']) context['documents'] = documents if kwargs.has_key('document_id'): document = Document.objects.get(pk=int(kwargs['document_id'])) context['document'] = document context['in_document_view'] = True return render(request, 'pages/examples/index.html', context) The `document_view` will receive a bunch of extra parameters related to the CMS: * `current_page` the page object, * `path` the path used to reach the page, * `lang` the current language, * `pages_navigation` the list of pages used to render navigation. .. note:: If the field doesn't appear within the admin interface make sure that your registry code is executed properly. .. note:: Look at the testproj in the repository for an example on how to integrate an external application. .. _sitemaps: Sitemaps ================= Gerbi CMS provide 2 sitemaps classes to use with `Django sitemap framework `_:: from pages.views import PageSitemap, MultiLanguagePageSitemap (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': {'pages':PageSitemap}}), # or for multi language: (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': {'pages':MultiLanguagePageSitemap}}) The `PageSitemap` class provide a sitemap for every published page in the default language. The `MultiLanguagePageSitemap` is gonna create an extra entry for every other language.