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中关于使用模块的基础知识
May 24 Python
Python 绘图和可视化详细介绍
Feb 11 Python
django模板语法学习之include示例详解
Dec 17 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
对Python中Iterator和Iterable的区别详解
Oct 18 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
Python下载的11种姿势(小结)
Nov 18 Python
Python之京东商品秒杀的实现示例
Jan 06 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
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
php发送post请求的三种方法
2014/02/11 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
[06:36]吞吞映像top1
2014/06/20 DOTA
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Python发展简史 Python来历
2019/05/14 Python
对python 调用类属性的方法详解
2019/07/02 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
python中可以声明变量类型吗
2020/06/18 Python
python爬虫如何解决图片验证码
2021/02/14 Python
python绘制汉诺塔
2021/03/01 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
大学生简历中个人的自我评价
2013/10/06 职场文书
酒店办公室文员岗位职责
2013/12/18 职场文书
思想品德自我评价
2014/02/04 职场文书
杜甫草堂导游词
2015/02/03 职场文书
2015年个人审计工作总结
2015/04/07 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python