在 Django Admin 中,如何强制 "View on Site" 按钮忽略站点?

In the Django Admin, how can I force the "View on Site" button to ignore Sites?

在我将站点应用程序添加到我的 Django 应用程序之前,"View on Site" 按钮使用了相对路径。这很有帮助,因为我的网站可以通过多个不同的域和暂存环境访问。

我最近开始使用 Flat Pages 应用程序,因此我也安装了 Sites 应用程序。

此更改后,所有 "View on Site" 按钮都使用在我的应用程序的默认站点中指定的域,而不是相对于从中访问 Django Admin 的域的路径。

是否可以覆盖 "View on Site" 按钮(或每个相关模型的 get_absolute_url() 功能)以忽略站点域,并返回使用相对路径?

是的,要覆盖 "View on Site" 按钮,请将 view_on_site 方法添加到您的 ModelAdmin。

文档中的示例。 ModelAdmin.view_on_site

from django.contrib import admin
from django.core.urlresolvers import reverse

class PersonAdmin(admin.ModelAdmin):
    def view_on_site(self, obj):
        return 'http://example.com' + reverse('person-detail',
                                              kwargs={'slug': obj.slug})