django admin添加自己的页面

建立模型

如果要单独建一个页面,用于展示model的数据,可以新建一个model,继承自要展示的那个类

py 复制代码
class ViewsByDayModel(ViewsByDay): # 父类为要展示的model类
    class Meta:
        proxy = True # 使用代理
        verbose_name = '每日浏览次数统计'
        verbose_name_plural = verbose_name

代理模型 proxy = True 。允许为一个已存在的模型创建一个新的类,这个新类在数据库中没有与之对应的表,但它可以覆盖原始模型的行为,如改变默认的Manager、添加或覆盖方法、改变模型的Meta属性等。代理模型在Django的admin后台中特别有用,因为它允许你为同一个数据表提供不同的管理界面和行为。

admin中注册模型

py 复制代码
@admin.register(ViewsByDayModel)
class ViewsByDayAdmin(admin.ModelAdmin):
    change_list_template = 'admin/admin_log.html'
    
    def changelist_view(self, request, extra_context=None):
        log_file = 'log/debug.log'
        log_content = []
        log_content += [line for line in open(log_file, 'r', encoding='UTF-8')]
        extra_context = extra_context or {}
        extra_context["context"] = log_content
        response = super().changelist_view(
            request,
            extra_context=extra_context
        )
        return response

建立admin模板

具体见:https://docs.djangoproject.com/zh-hans/4.2/ref/contrib/admin/#overriding-admin-templates

CSS 变量的列表在 django/contrib/admin/static/admin/css/base.css 中定义。

在admin中指定自定义的模板路径 ModelAdmin.change_list_template¶ 自定义模板的路径,由 changelist_view() 使用。

在官网中介绍的是在extra_context中添加自己要添加的数据

py 复制代码
def change_view(self, request, object_id, form_url="", extra_context=None):
        extra_context = extra_context or {}
        extra_context["osm_data"] = self.get_osm_info()
        return super().change_view(
            request,
            object_id,
            form_url,
            extra_context=extra_context,
        )

而通过测试,在 response.context_data['要添加的数据key'] 中添加数据,也是可以找到的

我是要在后台显示日志中的内容,通过heightlight的代码显示部分

html 复制代码
{% extends 'admin/change_list.html' %}
{% load static %}
{% block content_title %}
    <!-- ECharts单文件引入 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/styles/default.min.css">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/highlight.min.js"></script>
{% endblock %}
 
{% block result_list %}
管理领导浏览查看(循环显示,不做统计)
<script>hljs.initHighlightingOnLoad();</script>
<pre><code>
{% for line in context|slice:"::-1" %}{{ line }}{% endfor %}
</code></pre>
{% endblock %}

最终的效果就是把log日志中的内容,展示在后台显示了

欢迎大家在评论中交流提问

相关推荐
happylifetree3 小时前
Python09:核心语法-数据存储与运算-字面量
python
心之语歌3 小时前
Tkinter 画布基本梳理
运维·服务器·python
Wx-bishekaifayuan3 小时前
django个性化旅游路线推荐平台49005-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
小白快快跑哦4 小时前
python-字符串全解(六):正则表达式-量词
python·正则表达式·字符串
禹凕5 小时前
机器学习之Selenium(Machina Learning about Selenium)
爬虫·python·selenium·测试工具·机器学习
ebiobiz6 小时前
基于 GD32 Embedded Builder (GEB) 与 Nimmake 的 MCU 工程搭建指南
c++·python·单片机·嵌入式硬件·mcu
老歌老听老掉牙7 小时前
穿越时空的物流密码:VRP与VRPTW的深度剖析及实战求解
python·物流·vrp
FYKJ_20107 小时前
django电影推荐系统55066-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
ShyanZh7 小时前
【Python3基础】13-Python 常用设计模式
开发语言·python·设计模式
小静AI工程实验室8 小时前
RSA 算法详解:从模幂原理到 OAEP 加密、PSS 签名与 Python 实验
python·算法