Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Reusable application for Django introducing site tree, menu and breadcrumbs navigation elements.
Fetching latest commit...
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

SiteTree for Django

What's that

django-sitetree is a reusable application for Django introducing site tree, menu and breadcrumbs navigation elements.


  1. Django 1.1+
  2. 'Admin site' Django contrib package

How to use

  1. Add the 'sitetree' application to 'INSTALLED_APPS' in your settings file (usually '').
  2. Run './ syncdb' to install sitetree tables into database.
  3. Go to Django Admin site and add some trees and tree items.
  4. Add '{% load sitetree %}' tag to the top of a template.

    Now you can use the following template tags:

    1. 'sitetree_menu' tag renders menu:
      {% sitetree_menu from "mytree" include "trunk" %}
    2. 'sitetree_breadcrumbs' tag renders breadcrumbs path:
      {% sitetree_breadcrumbs from "mytree" %}
    3. 'sitetree_tree' tag renders entire site tree:
      {% sitetree_tree from "mytree" %}

More about template tags

  • Tree tag argument (part in double quotes, following 'from' word) could be template variable.

  • 'sitetree_menu' tag:
    {% sitetree_menu from "mytree" include "trunk,topmenu" %}
    Renders site tree items under 'trunk' and 'topmenu' aliased items.

    Aliases are given to items through the 'Admin site'. The following aliases are reserved:

    • 'trunk' - get items without parents (root items)
    • 'this-children' - get items under item resolved as current for the current page
    • 'this-siblings' - get items under parent of item resolved as current for the current page (current item included)

    Site tree item could be addressed not only by aliases but also by IDs.

  • Optional 'template' argument could be supplied to all above mentioned tags:
    {% sitetree_menu from "mytree" include "trunk,topmenu" template "mytrees/mymenu.html" %}
    {% sitetree_breadcrumbs from "mytree" template "mytrees/mybreadcrumbs.html" %}

Overriding sitetree built-in templates

To customize navigation elements view you should override the built-in sitetree templates as follows:

  1. Switch to sitetree folder
  2. Switch further to 'templates/sitetree'
  3. There you'll find the following templates:
    • breadcrumbs.html
    • menu.html
    • tree.html
  4. Copy whichever of them you need into your project templates directory and feel free to customize it.
  5. See 'Notes on advanced sitetree tags' below for clarification on two advanced sitetree template tags.

Notes on advanced sitetree tags

SiteTree introduces some advanced template tags which you have to deal with in case you override the built-in sitetree templates.

  1. 'sitetree_children' tag:
    {% sitetree_children of someitem for menu template "sitetree/mychildren.html" %}
    Implements site tree recursion.
    Used to render child items of specific site tree 'someitem' using template "sitetree/mychildren.html" for 'menu' navigation type.
    Basically template argument should contain path to current template itself.
    Allowed navigation types: 1) menu; 2) sitetree.
  2. 'sitetree_url' tag:
    {% sitetree_url for someitem params %}
    Resolves site tree item's url or url pattern.
    This tag is much the same as Django built-in 'url' tag. The difference is that after 'for' it should get site tree item object.
    And, yes, you can pass some params after that object.

Translating django-sitetree

You can translate application into your language if it is supported by Django.
For translation tips refer to Django documentation:

Something went wrong with that request. Please try again.