django admin 添加自定义链接方式


Posted in Python onMarch 11, 2020

背景

最近做项目开发出现一个需求,就是前端会发来用户对某一项内容的报错,报错信息中包含出错内容的id,为了方便管理,需要实现点击这个id直接转达相应内容的详情页面。

效果展示

解决

首先在django admin的列表中查看数据id所代表的链接

django admin 添加自定义链接方式

使用浏览器的检查元素功能查看点击该id所跳转的链接

django admin 添加自定义链接方式

现在我们知道点击admin页面跳转链接的格式了。

自定义widget

假如我们的内容id使用CharField字段存储,那么可以这样自定义一个widget

HTML

{% load myfileter %}
<a href="{{ widget.value|generate_link }}" rel="external nofollow" >{{ widget.value }}</a>

{%load myfilter%}是引入自定义模板标签的语句,该标签在下面定义。

python

class MyWidget(TextInput):
  template_name = "myWidget.html"
  def render(self, name, value, attrs=None, renderer=None):
    context = self.get_context(name, value, attrs)
    template = loader.get_template(self.template_name).render(context)
    return mark_safe(template)

自定义模板过滤器

在views.py所在的目录下新建一个文件夹templatetags,注意必须为这个名字。在文件夹中新建一个myfileter.py文件和_init_.py文件。

myfileter.py

# 生成自定义链接
@register.filter
def generate_link(value):
  id = str(value)
  #就是将第二张图片中的id替换为当前的id就行
  return "/admin/learningsource/learningsource/" + id + "/change/"

自定义模型表单

假如我们的模型定义如下

class FeedbackModel(models.Model):
  error_content_id=models.UUIDField("错误编号", primary_key=True, default=uuid.uuid4())
  ........

在models.py中定义一个ModelForm

class FeedbackModelForm(ModelForm):
  error_content_id = forms.CharField(label="错误编号",widget=MyWidget)

  class Meta:
    model = SourceLinkErrorReport
    fields = ['error_content_id',.....]

假如该模型在admin.py的模型管理器为

class FeedbackModelAdmin(admin.ModelAdmin):
..........

将上述定义的模型表单添加到模型管理器中

class FeedbackModelAdmin(admin.ModelAdmin):
form=FeedbackModelForm
..........

总结

使用这种方法可以不用创建一个空的模型然后重写它的changelist_view函数实现自定义链接,可以给admin界面的文字,图片等添加链接(通过自定义widget就可实现),并且链接样式可以自己定义,使用更方便。

在安全性上,本文的做法实际上相当于自己手动给django admin内置视图函数发送请求,和原来django自己自动生成的页面链接没有任何区别,对自定义链接的响应实际上也要经过**django ** admin的认证,安全性是没问题的。

以上这篇django admin 添加自定义链接方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
纯Python开发的nosql数据库CodernityDB介绍和使用实例
Oct 23 Python
Python实现的建造者模式示例
Aug 06 Python
python实现抽奖小程序
Apr 15 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
解决keras backend 越跑越慢问题
Jun 18 Python
Python根据URL地址下载文件并保存至对应目录的实现
Nov 15 Python
五种Python转义表示法
Nov 27 Python
PyTorch 如何自动计算梯度
May 23 Python
django xadmin 管理器常用显示设置方式
Mar 11 #Python
django从后台返回html代码的实例
Mar 11 #Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 #Python
python3 实现口罩抽签的功能
Mar 11 #Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 #Python
Django+boostrap 美化admin后台的操作
Mar 11 #Python
Windows 下python3.8环境安装教程图文详解
Mar 11 #Python
You might like
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
PHP微信支付实例解析
2016/07/22 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
Javascript 强制类型转换函数
2009/05/17 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
Python简明入门教程
2015/08/04 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
基于keras中的回调函数用法说明
2020/06/17 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
pip install命令安装扩展库整理
2021/03/02 Python
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
六年级数学教学反思
2016/02/16 职场文书
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技