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.mzph.cn/web/77391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker容器持久化

引言 Docker 容器作为一种轻量级、可移植的虚拟化技术&#xff0c;广泛应用于开发、测试和生产环境中。然而&#xff0c;容器天生是短暂的&#xff0c;意味着它们在生命周期结束后会被销毁&#xff0c;而其中的数据也会随之丢失。为了确保容器中的数据能够持久化&#xff0c;我…

ShaderToy学习笔记 02.圆

1. 画圆 1.1. 圆的方程 圆的方程是&#xff1a;(x^2 y^2 r^2)&#xff0c;其中(r)是圆的半径。 我们可以使用 desmos 来验证一下。 输入 x^2 y^2 -10&#xff0c;即可得到圆。 类似下图 1.2. 画圆的方式 画圆&#xff1a;使用圆的方程&#xff0c;判断每个像素点是否在圆…

一文详解卷积神经网络中的卷积层和池化层原理 !!

文章目录 前言 一、卷积核大小&#xff08;Kernel Size&#xff09; 1. 卷积核大小的作用 2. 常见的卷积核大小 3. 选择卷积核大小的原则 二、步长&#xff08;Stride&#xff09; 1. Stride的作用 三、填充&#xff08;Padding&#xff09; 1. 填充的作用 四、通道数&#xff…

云+AI双轮驱动,亚马逊云科技加速中国企业出海新浪潮

导读&#xff1a;全球化就是本地化 作者 | 小葳 图片来源 | 摄图 近年来&#xff0c;中国企业出海步伐不断加快&#xff0c;“不出海&#xff0c;就出局”成为很多企业的共识。 据沙利文统计&#xff0c;2024年上半年&#xff0c;超过2000家中国上市企业布局海外市场&#xff…

C语言HashTable基本理解

文章目录 一、哈希表概念1. 哈希表的基本概念2. 哈希表的核心组件2.1 哈希函数2.2 冲突处理&#xff08;哈希碰撞&#xff09; 3.哈希表的三种结构(1) 数组作为哈希表示例&#xff1a; 2. Set&#xff08;集合&#xff09;示例&#xff1a;查找数组中的重复元素1. Set 基础概念…

【缓存与数据库结合最终方案】伪从技术

实现伪从技术&#xff1a;基于Binlog的Following表变更监听与缓存更新 技术方案概述 要实现一个专门消费者服务作为Following表的伪从&#xff0c;订阅binlog并在数据变更时更新缓存&#xff0c;可以采用以下技术方案&#xff1a; 主要组件 MySQL Binlog监听&#xff1a;使…

《100天精通Python——基础篇 2025 第3天:变量与数据类型全面解析,掌握Python核心语法》

目录 一、Python变量的定义和使用二、Python整数类型&#xff08;int&#xff09;详解三、Python小数/浮点数&#xff08;float&#xff09;类型详解四、Python复数类型(complex)详解---了解五、Python字符串详解(包含长字符串和原始字符串)5.1 处理字符串中的引号5.2 字符串的…

【前后端分离项目】Vue+Springboot+MySQL

文章目录 1.安装 Node.js2.配置 Node.js 环境3.安装 Node.js 国内镜像4.创建 Vue 项目5.运行 Vue 项目6.访问 Vue 项目7.创建 Spring Boot 项目8.运行 Spring Boot 项目9.访问 Spring Boot 项目10.实现 Vue 与 Spring Boot 联动11.安装 axios12.编写请求13.调用函数请求接口14.…

线性代数(一些别的应该关注的点)

一、矩阵 矩阵运算&#xff1a;线性变换 缩放、平移、旋转 无所不能的矩阵 - 三维图形变换_哔哩哔哩_bilibili

01Redis快速入门(nosql、安装redis、客户端、命令及类型、java客户端、序列化)

Redis的常见命令和客户端使用 1.初识Redis Redis是一种键值型的NoSql数据库&#xff0c;这里有两个关键字&#xff1a; 键值型 NoSql 其中键值型&#xff0c;是指Redis中存储的数据都是以key、value对的形式存储&#xff0c;而value的形式多种多样&#xff0c;可以是字符串…

AI编程:[体验]从 0 到 1 开发一个项目的初体验

一、开发信息 开发时间&#xff1a;1.5-2天工具使用&#xff1a; 不熟练&#xff0c;开发本项目前1天&#xff0c;才简单使用了Cursor的功能 功能复杂度&#xff1a; 开发的功能相对简单。页面&#xff1a;2个&#xff0c;登录页面&#xff0c;个人中心页面功能&#xff1a;5个…

LeetCode-392 判断子序列

给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一个子序列&#…

Linux 系统监控大师:Glances 工具详解助力自动化

看图猜诗&#xff0c;你有任何想法都可以在评论区留言哦~ 摘要 Glances 是一款基于 Python 开发的跨平台系统监控工具&#xff0c;集成了 CPU、内存、磁盘、网络、进程等核心指标的实时监控能力&#xff0c;并支持命令行、Web界面、客户端-服务器模式等多种使用场景。其轻量级…

Spring Boot 3.4.5 运行环境需求

&#x1f4dd; Spring Boot 3.4.5 运行环境要求 &#x1f33f; 1️⃣ 基本需求 ☑️ JDK版本&#xff1a;最低 Java 17 &#x1f517; https://www.java.com/ 最高兼容至 Java 24 ☑️ 依赖框架&#xff1a;需搭配 Spring Framework 6.2.6 &#x1f517; https://docs.sprin…

在KEIL里C51和MDK兼容以及添加ARM compiler5 version编译器

前言 我们想在一个keil里面可以打开32和51的文件&#xff0c;这样就不需要两个keil了 还有就是现在的keil&#xff0c;比如我用的是5.41的&#xff0c;就没有5版本的处理器&#xff0c;所以要安装 本篇文章我们来详细讲解如何实现上面说的两个内容 准备的东西 1.ARM5编译器 …

Flutter 弹窗队列管理:支持优先级的线程安全通用弹窗队列系统

在复杂的 Flutter 应用开发中&#xff0c;弹窗管理是一个常见难题。手动管理弹窗的显示顺序和条件判断不仅繁琐&#xff0c;还容易出错。为此&#xff0c;我们实现了一个支持优先级的线程安全通用弹窗队列管理系统。它能够自动管理弹窗的显示顺序&#xff0c;支持条件判断&…

鸿蒙NEXT开发剪贴板工具类(ArkTs)

import { pasteboard } from kit.BasicServicesKit; import { StrUtil } from ./StrUtil;/*** 剪贴板工具类* 需要权限&#xff1a;* ohos.permission.READ_PASTEBOARD // 允许应用读取剪贴板。* author CSDN-鸿蒙布道师* since 2025/04/25*/ export class PasteboardUtil {…

FastAPI 零基础入门指南:10 分钟搭建高性能 API

一、为什么选择 FastAPI&#xff1f; 想象一下&#xff0c;用 Python 写 API 可以像搭积木一样简单&#xff0c;同时还能拥有媲美 Go 语言的性能&#xff0c;这个框架凭借三大核心优势迅速风靡全球&#xff1a; 开发效率提升 3 倍&#xff1a;类型注解 自动文档&#xff0c;…

【算法】BFS-解决FloodFill问题

目录 FloodFill问题 图像渲染 岛屿数量 岛屿的最大面积 被围绕的区域 FloodFill问题 FloodFill就是洪水灌溉的意思&#xff0c;假设有下面的一块田地&#xff0c;负数代表是凹地&#xff0c;正数代表是凸地&#xff0c;数字的大小表示凹或者凸的程度。现在下一场大雨&…

代码随想录算法训练营第三十七天|动态规划part4

1049. 最后一块石头的重量 II 题目链接&#xff1a; 1049. 最后一块石头的重量 II - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a; 代码随想录 思路&#xff1a; 理解为把石头分成两堆 使得两堆的差值尽可能小 求这个最小值1 理解为往背包里装物品 每个物品的…