我正在尝试在Django Admin中添加一个“在网站上查看”链接到我的list_display。
这似乎是一个非常常见的用例,有没有一种快捷方式呢?
答案 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")