当前位置: 首页 > backend >正文

django admin 添加自定义页面

在Django中,你可以通过多种方式向Django Admin添加自定义页面。以下是一些常见的方法:

方法1:使用ModelAdmin的get_urls()方法
如果你只是想添加一个简单的页面来展示信息,你可以在你的ModelAdmin类中重写get_urls()方法。

from django.urls import path
from django.utils.safestring import mark_safe
from django.contrib import admin
from .models import MyModelclass MyModelAdmin(admin.ModelAdmin):def get_urls(self):urls = super().get_urls()my_urls = [path('my-custom-view/', self.admin_site.admin_view(self.my_custom_view))]return my_urls + urlsdef my_custom_view(self, request):return mark_safe('<h1>这是一个自定义页面</h1>')admin.site.register(MyModel, MyModelAdmin)

方法2:使用SimpleListFilter添加自定义链接
如果你想要在列表页旁边添加一些自定义链接,可以使用SimpleListFilter。

from django.contrib import admin
from django.utils.safestring import mark_safe
from .models import MyModelclass CustomLinkListFilter(admin.SimpleListFilter):title = 'custom links'template = 'admin/filter.html'def has_output(self):return Truedef choices(self, changelist):yield {'selected': changelist.get_query_string({}),'query_string': changelist.get_query_string({}),'display': '自定义链接'}def queryset(self, request, queryset):return querysetdef output(self, changelist):return mark_safe('<a href="/admin/myapp/mymodel/my-custom-view/">自定义页面</a>')class MyModelAdmin(admin.ModelAdmin):list_filter = (CustomLinkListFilter,)admin.site.register(MyModel, MyModelAdmin)

方法3:使用admin_site.index和admin_site.app_index装饰器添加页面到主索引页或应用索引页
你可以通过重写index和app_index视图来添加自定义页面。例如,如果你想在应用的主页旁边添加一个链接:

from django.contrib import admin
from django.urls import path, reverse, NoReverseMatch
from django.utils.safestring import mark_safe
from .models import MyModelclass MyModelAdmin(admin.ModelAdmin):pass  # 实现你的自定义逻辑,例如列表展示或表单等。admin.site.register(MyModel, MyModelAdmin)@admin.register(MyModel)  # 使用装饰器注册模型和它的管理员类(如果你的Django版本支持)
class MyModelAdmin(admin.ModelAdmin):pass  # 实现你的自定义逻辑,例如列表展示或表单等。

然后,你可以通过修改urls.py来添加自定义视图:

from django.urls import path, include, re_path
from django.contrib import admin
from .views import custom_view  # 确保导入你的视图函数或类视图。urlpatterns = [path('admin/', admin.site.urls),path('admin/myapp/mymodel/my-custom-view/', custom_view, name='custom-view'),  # 添加自定义URL路径和视图。
] + admin.site.urls  # 注意这里的顺序很重要,确保先包含你的自定义路径再包含admin的默认路径。

在views.py中定义你的视图:

from django.shortcuts import render
from django.http import HttpResponse
from django.utils.safestring import mark_safe
from django.contrib.admin.views.decorators import staff_member_required  # 如果需要限制访问权限。
from django.contrib.auth.decorators import login_required  # 如果需要登录才能访问。
from django.views.decorators.cache import never_cache  # 防止缓存。
from django.views.decorators.csrf import csrf_protect  # 保护CSRF。 如果你使用的是类视图,可以在类中添加。 例如: @method_decorator([login_required, staff
http://www.xdnf.cn/news/1642.html

相关文章:

  • 从码云上拉取项目并在idea配置npm时完整步骤
  • netty中的Channel与Java NIO中的Channel核心对比
  • docker 配置代理
  • 3、ArkTS语言介绍
  • 数据完整性的守护者:哈希算法原理与实现探析
  • Redis的过期删除策略和内存淘汰策略
  • Django创建的应用目录详细解释以及如何操作数据库自动创建表
  • R/G-B/G色温坐标系下对横纵坐标取对数的优势
  • Java中的阻塞队列有界和无界区别
  • Langchain检索YouTube字幕
  • Axure复选框组件的深度定制:实现自定义大小、颜色与全选功能
  • react-09React生命周期
  • 解析塔能科技:绿色低碳智慧节能一站式破局之匙
  • 极狐GitLab 如何从 CSV 导入议题?
  • 实时步数统计系统 kafka + spark +redis
  • 4.1 融合架构设计:LLM与Agent的协同工作模型
  • 遨游三防|30200mAh、双露营灯三防平板,见证堆料天花板
  • 多语言笔记系列:使用用户输入
  • Python爬虫爬取图片并存储到MongoDB(注意:仅尝试存储一条空的示例数据到MongoDB,验证MongoDB的联通性)
  • 220V转18V600mA非隔离芯片WT5110
  • 【防火墙 pfsense】1简介
  • Freerots----任务通知
  • Qt本地化 - installTranslator不生效
  • Atlas 800I A2 离线部署 DeepSeek-R1-Distill-Llama-70B
  • 2025年土建施工员考试题库及答案
  • Control Center安卓版:自定义控制中心,提升手机操作体验
  • PostgreSQL 分区表——范围分区SQL实践
  • 【金仓数据库征文】——金仓数据库:国产数据库的卓越之选
  • Docker-高级使用
  • 反射,枚举,lambda表达式