Adding a "View on Site" link to the Django admin list_display

django, django-admin

Solution

You could write a reusable mixin like this (untested):

class ViewOnSiteMixin(object):
    def view_on_site(self, obj):
        return mark_safe(u"<a href='%s'>view on site</a>" % obj.get_absolute_url())
    view_on_site.allow_tags = True
    view_on_site.short_description = u"View on site"

Use it like this:

class SomeAdmin(ViewOnSiteMixin, admin.ModelAdmin):
    list_display = [..., "view_on_site", ...]

(of course needs `get_absolute_url` defined on your model)

Problem

I'm trying to add a "View on site" link to my list_display in Django Admin. This seems like a pretty common use case, is there a shortcut way of doing it?

Original source