<!-- In your base.html (or whatever base template you are using in your project) have the following template code, and in your view functions, supply a model_obj context variable that refers to the primary model object of that view so base.html will know which model/model object to refer to. --> {% if request.user.is_staff %} <div id="admin-toolbar"> {% if model_obj %} <a href="{{ model_obj.get_admin_change_url }}">Edit</a> | <a href="{{ model_obj.get_admin_delete_url }}">Delete</a> | <a href="{{ model_obj.get_admin_history_url }}">History</a> | <a href="{{ model_obj.get_admin_add_url }}">Add another {{ model_obj.get_verbose_name }}</a> | <a href="{{ model_obj.get_admin_changelist_url }}">Manage {{ model_obj.get_verbose_name_plural }}</a> {% endif %} </div> {% endif %} <!-- # In your Python code, you need: from django.db import models from django.core.urlresolvers import reverse models.Model._admin_url_name = lambda self, type: 'admin:%s_%s_%s' % ( self._meta.app_label, self._meta.module_name, type) def get_admin_change_url(self): return reverse(self._admin_url_name('change'), args=(self.pk, )) models.Model.get_admin_change_url = get_admin_change_url def get_admin_delete_url(self): return reverse(self._admin_url_name('delete'), args=(self.pk, )) models.Model.get_admin_delete_url = get_admin_delete_url def get_admin_history_url(self): return reverse(self._admin_url_name('history'), args=(self.pk, )) models.Model.get_admin_history_url = get_admin_history_url def get_admin_changelist_url(self): return reverse(self._admin_url_name('changelist')) models.Model.get_admin_changelist_url = get_admin_changelist_url def get_admin_add_url(self): return reverse(self._admin_url_name('add')) models.Model.get_admin_add_url = get_admin_add_url models.Model.get_verbose_name = lambda self: self._meta.verbose_name models.Model.get_verbose_name_plural = lambda self: self._meta.verbose_name_plural -->