1. 介绍
在Django后台管理界面(admin)中,提供了很多默认的功能和链接,方便对数据库进行操作和管理。但是有时候我们需要添加自定义的链接,以扩展和增强后台管理界面。
本文将重点介绍如何在Django admin中添加自定义链接的方式。
2. 准备工作
在开始之前,需要确保已经创建了一个Django项目,并在其中创建了至少一个app。
3. 创建自定义链接
3.1 修改admin.py文件
首先,在app的目录下找到admin.py文件,如果没有则需要手动创建该文件。
在admin.py文件中导入需要的模块和类:
from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
然后,定义一个新的类,继承自admin.ModelAdmin:
class MyModelAdmin(admin.ModelAdmin):
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['my_custom_link'] = self.get_custom_link(object_id)
return super().change_view(request, object_id, form_url, extra_context=extra_context)
def get_custom_link(self, object_id):
custom_link = reverse('admin:myapp_mymodel_custom_link', args=(object_id,))
return custom_link
def my_custom_link(self, obj):
custom_link = self.get_custom_link(obj.pk)
return format_html('<a href="{}">Custom Link</a>', custom_link)
my_custom_link.short_description = 'Custom Link'
在上述代码中,我们定义了一个自定义的admin.ModelAdmin类MyModelAdmin。其中,change_view()方法用于修改Change视图,在显示Change页面的时候会添加一个自定义链接。get_custom_link()方法用于获取自定义链接的URL。my_custom_link()方法用于生成链接的HTML代码。这里我们使用了reverse()函数来获取URL。
3.2 修改urls.py文件
接下来,在项目的urls.py文件中添加一个URL映射:
from django.urls import path
from myapp.views import custom_link_view
urlpatterns = [
# 其他URL映射
path('myapp/mymodel//custom_link/', custom_link_view, name='myapp_mymodel_custom_link'),
]
这里我们定义了一个名为myapp_mymodel_custom_link的URL,对应的视图函数为custom_link_view。
3.3 编写视图函数
在myapp的views.py文件中,编写custom_link_view函数:
from django.http import HttpResponse
def custom_link_view(request, object_id):
# 自定义链接的逻辑代码
return HttpResponse("Custom Link View")
这里我们暂时只返回一个简单的HTTP响应,实际项目中可以根据需要编写自己的逻辑代码。
4. 注册自定义类
最后一步是在admin.py文件中注册我们定义的自定义类:
from myapp.models import MyModel
admin.site.register(MyModel, MyModelAdmin)
5. 查看效果
运行Django开发服务器,并在浏览器中访问admin管理界面。打开MyModel的Change页面,会发现多了一个名为Custom Link的链接。
点击该链接,会跳转到我们定义的custom_link_view视图函数对应的URL,并显示"Custom Link View"。