Templates & Placeholders

    You can use HTML templates to customise the look of your website, define Placeholders to mark sections for managed content and use special tags to generate menus and more.

    You can define multiple templates, with different layouts or built-in components, and choose them for each page as required. A page’s template can be switched for another at any time.

    You’ll find the site’s templates in .

    If you didn’t change the automatically-created home page’s template, it’s feature.html.

    Placeholders are an easy way to define sections in an HTML template that will be filled with content from the database when the page is rendered. This content is edited using django CMS’s frontend editing mechanism, using Django template tags.

    You can see them in feature.html: {% placeholder "feature" %} and {% placeholder "content" %}.

    If you’re not already familiar with Django template tags, you can find out more in the Django documentation.

    Add a new placeholder {% placeholder "splashbox" %} to the template’s HTML structure. You can add it anywhere, for example:

    If you switch to Structure mode, you’ll see the new placeholder available for use.

    The content of the placeholders we’ve encountered so far is different for every page. Sometimes though you’ll want to have a section on your website which should be the same on every single page, such as a footer block.

    You could hard-code your footer into the template, but it would be nicer to be able to manage it through the CMS. This is what static placeholders are for.

    So let’s add a footer to all our pages. Since we want our footer on every single page, we should add it to our base template (mysite/templates/base.html). Place it at the bottom of the HTML <body>:

    Save the template and return to your browser. Refresh any page in mode, and you’ll see the new static placeholder. If you add some content to it in the usual way, you’ll see that it appears on your site’s other pages too.

    In order to render the CMS’s menu in your template you can use the show_menu tag.

    The example we use in mysite/templates/base.html is:

    Any template that uses show_menu must load the CMS’s menu_tags library first:

    If you chose “bootstrap” while setting up with djangocms-installer, the menu will already be there and templates/menu.html will already contain a version that uses bootstrap compatible markup.