Django admin - 添加自定义链接以更改列表视图

时间:2016-04-19 14:47:38

标签: python django django-admin

首先感谢您花时间阅读我的问题 我尝试在我的管理员更改列表视图中添加自定义按钮,但它总是让我找不到页面(404)

这是我的modelAdmin代码:

class MyModelAdmin(admin.ModelAdmin):

    class Media:

        js = ('admin/js/additional_js.js',)

    model = MyModel

    def get_urls(self):
        urls = super(MyModelAdmin, self).get_urls()
        analyze_url = patterns('',
                           (r'^(?P<pk>\d+)/analyze/$', 
                        self.admin_site.admin_view(self.analyze_view))
                           )
        return analyze_url + urls

    def analyze_view(self, request, pk):
        # some code here
        HttpResponseRedirect(
            reverse('admin:myapp_MyModel_change', args=(pk,))
        )

我的jQuery代码,用于添加自定义链接以更改列表视图:

(function($) {
    $(document).ready(function($) {
        $(".object-tools").append('<li><a href="analyze/" class="link">Analyze</a></li>');
    });
})(django.jQuery);

当我点击我的自定义链接时,它给了我:

带主键的MyModel对象&#39; 3 /更改/分析&#39;不存在。

我看到链接没有指向视图
有人可以帮我解决这个问题。
感谢

1 个答案:

答案 0 :(得分:1)

在Django 1.9中,管理员更改网址已更改为/admin/<app>/<model>/<pk>/change/release notes)。

因此,链接到html中的href="analyze/"是没有意义的。相对网址被视为/admin/<app>/<model>/3/change/analyze,而不是您期望的/admin/<app>/<model>/3/analyze

您可以通过将链接更改为:

来解决问题
<a href="../analyze/" ...

理想情况下,最好是反转网址而不是相对链接。我认为这会使代码变得不那么脆弱。

由于您使用的是Django 1.9,因此您可以更新代码以使用列表而不是patterns

from django.conf.urls import url

analyze_url = [
    url(r'^(?P<pk>\d+)/analyze/$', self.admin_site.admin_view(self.analyze_view)),
]