xadmin后台页面的自定制
01-自定制页面
注:最近找到了更好的解决办法:重写钩子函数版 https://www.cnblogs.com/pgxpython/p/10593507.html
需求背景:根据要实现的功能需求,xadmin的后台页面不满足现有要求,需要进行自定义页面来替换后台固有页面,所以要在源码上入手
修改前的页面:

修改后的效果:

解决方法:
xadmin的处理流程和django类似,都是通过拦截URL,然后封装数据,再在页面解析。
思路:
.在views/base.py中添加控制(是否需要跳转,跳转的url) .在templates/xadmin/base_site.html 中根据上一步传过来的值控制显示内容(用iframe) 或者 在 base_site.html 里添加自定义的HTML内容 (我就是添加的html代码) .自己编写处理该url的页面和view.py,然后iframe中就会显示该页面
实现代码:
# xadmin/views/base.py class CommAdminView(BaseAdminView):
@filter_hook
def get_context(self):
for menu in nav_menu:
check_selected(menu, self.request.path) # 添加自定义url,视图函数获取数据
add_url_flag = False
auto_title = ''
pid = ''
subtitle = ''
print(self.request.get_full_path())
if '/xadmin/cashflows/cash_title_content/' in self.request.get_full_path():
from apps.cashflows.models import cash_title_link, cash_title_content
add_url_flag = True
auto_title = cash_title_link.objects.all()
# print('title', title)
pid = self.request.GET.get('pid')
# print('pid', pid, type(pid))
if pid:
subtitle = cash_title_content.objects.filter(content_cash_id=pid)
pid = int(pid)
else:
subtitle = None
else:
pass print('auto_title', auto_title)
print('pid', pid)
print('subtitle', subtitle)
context.update({
'menu_template': self.menu_template,
'nav_menu': nav_menu,
'site_title': self.site_title,
'site_footer': self.site_footer,
'breadcrumbs': self.get_breadcrumb(), # 自定义获取的数据,返回给base_site.html页面
'add_url_flag': add_url_flag,
'auto_title': auto_title,
'subtitle': subtitle,
'pid': pid,
}) return context
# xadmin/templates/xadmin/base_site.html
{% if add_url_flag %}
<div class="col-sm-3 col-sm-offset-1 panel panel-primary" style="padding: 0;">
<div class="panel-heading">表单项目名称表</div>
<div style="width:389px; height:347px; overflow:scroll; text-align: center">
<table class="table table-hover">
<tr>
<th style="text-align: center">序号</th>
<th style="text-align: center">表单名称</th>
</tr>
{% for i in auto_title %}
<tr class="{% if pid == forloop.counter %}active{% endif %}">
<td >{{ forloop.counter }}</td>
<td ><a href="?pid={{ forloop.counter }}">{{ i }}</a></td>
</tr>
{% endfor %}
</table>
</div>
</div>
<div class="col-sm-3 col-sm-offset-1 panel panel-success" style="padding: 0;">
<div class="panel-heading">表单名称下的标题</div>
<div style="width:389px; height:347px; overflow:scroll; text-align: center">
<table class="table" style=" text-align: center">
<tr>
<th style="text-align: center">序号</th>
<th style="text-align: center">标题</th>
</tr>
{% for a in subtitle %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ a }}</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% else %}
{% block content %}
{#此处为 原有的后台显示内容及页面展示样式#}
{{ content }}
{% endblock %}
{% endif %}
base_site.html部分源码介绍:
{% block breadcrumbs %}
<ul class="breadcrumb">
{% if breadcrumbs %}
{% for bc in breadcrumbs %}
<li>
{% if forloop.last or not bc.url %}{{ bc.title }}
{% else %}<a href="{{ bc.url }}">{{ bc.title }}</a>{% endif %}
</li>
{% endfor %}
{% else %}
<li><a href="{% url 'xadmin:index' %}">{% trans 'Home' %}</a></li>
{% if title %}{{ title }}{% endif %}
{% endif %}
</ul>
{% endblock %}
以上代码实现的效果为:

{% block content-nav %}
<div class="navbar content-navbar navbar-default navbar-xs" data-toggle="breakpoint"
data-class-xs="navbar content-navbar navbar-inverse navbar-xs"
data-class-sm="navbar content-navbar navbar-default navbar-xs">
<div class="navbar-header">
{% view_block 'nav_toggles' %}
{% block nav_toggles %}
{% include "xadmin/includes/toggle_back.html" %}
{% endblock %}
<a class="navbar-brand" data-toggle="collapse" data-target="#top-nav .navbar-collapse">
{% block nav_title %}{% endblock %}
</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
{% view_block 'nav_menu' %}
</ul>
{% view_block 'nav_form' %}
{% block nav_form %}{% endblock %}
<div class="navbar-btn pull-right hide-xs">
{% view_block 'nav_btns' %}
{% block nav_btns %}{% endblock %}
</div>
</div>
</div>
{% endblock %}
以上代码实现的效果为:

参考文章:https://www.cnblogs.com/lanqie/p/8675533.html
xadmin后台页面的自定制的更多相关文章
- xadmin后台页面的自定制(2)重写钩子函数版
由于项目有通过自定义页面来实现功能的需求,百度也查了很多资料,也没找到合适的方法,所以决定分析源码,通过对源码的分析,找到了此方法. 01-需求 首先,如果要在xadmin中展示一个数据管理页面,首先 ...
- xadmin后台页面定制和添加服务器监控组件
xadmin定制 项目需要添加服务器监控页面,碍于xadmin不是很好自定义页面,之前写过插件,太麻烦了,还是直接改源码 原理其实很简单,因为xadmin的处理流程和django类似,都是通过拦截UR ...
- django xadmin后台页面实现二级联动
思路 先找到控件id ,这样就可以监听change事件 然后把自己写的js加入xadmin中 添加url和view,接受ajax请求和发送数据 第一步:找到联动上下级的ID 在浏览器中通过F12查看 ...
- python测试开发django-54.xadmin添加自定义页面
前言 xadmin后台如何添加一个自己写的页面呢?如果仅仅是在GlobalSettings添加url地址的话,会丢失左侧的导航菜单和顶部的页面,和整体的样式不协调. 新增页面后希望能保留原来的样式,只 ...
- 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明
第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...
- 自定义xadmin后台首页
登陆xadmin后台,首页默认是空白,可以自己添加小组件,xadmin一切都是那么美好,但是添加小组件遇到了个大坑,快整了2个礼拜,最终实现想要的界面.初始的页面如图: 本机后台显示这个页面正常,do ...
- python测试开发django-39.xadmin详情页面布局form_layout
前言 xadmin的详情页面默认是一行展示一个字段,可以使用form_layout对详情页面的布局重新设计. 可以设置必填和非必填字段,也可以设置不显示,不可以编辑的字段. models模块 先在mo ...
- 轮播图和xadmin后台管理
一.数据库设计 轮播图 1.安装依赖 pip install Pillow 2.模型类:home/models.py class Banner(models.Model): ""& ...
- MVC 从后台页面 取前台页面传递过来的值的几种取法
MVC 从后台页面 取前台页面传递过来的值的几种取法 <1>前台页面 Index视图 注意:用户名表单的name值为txtName 密码表单的name值为txtPassword & ...
随机推荐
- Linux 无线网卡配置
无线网卡常见的配置选项 某TL-WR842N路由器无线配置选项含义: 无线名称 路由器的无线(Wi-Fi)名称.无线密码 无线加密使用WPA2-PSK/WPA-PSK加密方式.AES加密算法,无线密码 ...
- The process could not read file xxx due to OS error 53
在不同地域的两个SQL Server服务器上配置了复制(Replication)用于同步数据(生产环境配置有Replication,测试环境也配有Replication),两地通过专线连接起来,这 ...
- mssql 怎么配置指定的表 不允许删除数据?
http://www.maomao365.com/?p=5089 <span style="color:red;font-weight:bold;">前言: 前几天收到 ...
- python高级(2)—— 基础回顾2
回顾知识 一 操作系统的作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口 管理.调度进程,并且将多个进程对硬件的竞争变得有序 关于操作系统的发展史,可以参考我之前的一篇博文:传送门 二 多道技术: ...
- Cs231n课堂内容记录-Lecture2-Part2 线性分类
Lecture 3 课程内容记录:(上)https://zhuanlan.zhihu.com/p/20918580?refer=intelligentunit (中)https://zhuanlan. ...
- echo 在shell及脚本中显示色彩及闪烁警告效果
在shell脚本编写中,echo用于输出字符串等提示信息,当我们需要格外显示色彩及闪烁效果如下: 一.在执行shell中显示色彩: 语法格式: echo -e "\033[颜色1:颜色2m ...
- 4.9Python数据处理篇之Matplotlib系列(九)---子图分布
目录 目录 前言 (一)subplot()方法 ==1.语法说明== ==2.源代码== ==3.输出效果== (二)subplot2grid方法 ==1.语法说明== ==2.源代码== ==3.展 ...
- 7个小技巧,解决eclipse卡顿问题
eclipse作为开发工具,每天都要使用,你肯定遇到过eclipse卡到想哭的时刻,严重影响开发效率啊!如果内存条不要钱,那就加内存吧!一个不够加两个!当然这都是玩笑话,如果不花钱也能解决问题,希望下 ...
- hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息(Locations)
关键字:hdfs fsck.block.locations 在HDFS中,提供了fsck命令,用于检查HDFS上文件和目录的健康状态.获取文件的block信息和位置信息等. fsck命令必须由HDFS ...
- [CQOI2017]老C的键盘
[CQOI2017]老C的键盘 题目描述 额,网上题解好像都是用的一大堆组合数,然而我懒得推公式. 设\(f[i][j]\)表示以\(i\)为根,且\(i\)的权值为\(j\)的方案数. 转移: \[ ...