在网站上添加"视图"链接到Django admin list_display

时间:2014-06-04 00:26:18

标签: django django-admin

我正在尝试在Django Admin中添加一个“在网站上查看”链接到我的list_display。

这似乎是一个非常常见的用例,有没有一种快捷方式呢?

2 个答案:

答案 0 :(得分:5)

你可以像这样写一个可重复使用的mixin(未经测试):

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"

像这样使用:

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

(当然需要在您的模型上定义get_absolute_url

答案 1 :(得分:2)

使用view_on_site会破坏管理视图中的“在网站上查看”链接 - 当您为模型设置get_absolute_url时,该链接会显示出来。

相反,您可以使用该列的任何其他名称,只需将其与函数名称匹配。

from django.utils.safestring import mark_safe 
from django.utils.translation import ugettext as _

class ServisAdmin(admin.ModelAdmin):
    list_display = (.. ,'view_link')

    def view_link(self, obj):
        return mark_safe(
            '<a href="{0}">{1}</a>'.format(
                obj.get_absolute_url(),
                _("View on site")
            )
        )
    view_link.allow_tags = True
    view_link.short_description = _("View on site")