可以通过自定义Django Admin的list_display选项和自定义的JavaScript脚本来实现。
- 首先,您需要自定义Django admin模型的list_display。在您所需的列中添加一个自定义的HTML字段,指向一个按钮,例如:
from django.urls import reverse
from django.utils.html import format_html
class YourAdmin(admin.ModelAdmin):
list_display = ('name', 'email', 'custom_button')
def custom_button(self, obj):
url = reverse('admin:custom_view', args=[obj.id])
return format_html('<a class="button" href="{}">Custom Button</a>', url)
custom_button.short_description = 'Actions'
- 创建一个新的视图来处理这个按钮的点击事件,并返回表格的HTML。(在urls.py中添加视图的URL)
from django.shortcuts import render
def custom_view(request, object_id):
# 处理数据
return render(request, 'custom.html', {'data': data})
- 创建一个HTML页面,其中包含您想要显示的表格。将其存储在/admin/templates/中,或者使用 os.path.join(settings.BASE_DIR, 'templates')指定模板路径。
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Custom View</title>
</head>
<body>
<table>
{% for row in data %}
<tr>
{% for cell in row %}
<td>{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</body>
</html>
- 最后一步是在自定义JavaScript脚本中定义按钮的单击事件。您可以在 Django Admin 管理界面的base_site.html中引入此脚本。以下是一个示例脚本:
(function($) {
$(document).ready(function() {
$('.button').click(function(event) {
event.preventDefault();
$.ajax({
url: $(this).attr('href'),
success: function(data) {
$('body').append(data);
}
});
});
});
})(django.jQuery);
当每一行的按钮被点击时,上述脚本将发起一个 AJAX 请求,以获取定义的表格 HTML 页面,然后将其追加到文档的末尾。 本方法可以通过自定义JavaScript视图来显示HTML,JSON,CSV或任何其他可渲染的数据类型。