首先感谢您花时间阅读我的问题 我尝试在我的管理员更改列表视图中添加自定义按钮,但它总是让我找不到页面(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;不存在。
我看到链接没有指向视图
有人可以帮我解决这个问题。
感谢
答案 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)),
]