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 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python 时间操作例子和时间格式化参数小结
Apr 24 Python
仅利用30行Python代码来展示X算法
Apr 01 Python
利用Python的Twisted框架实现webshell密码扫描器的教程
Apr 16 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
Python实现图片批量加入水印代码实例
Nov 30 Python
Python爬虫抓取指定网页图片代码实例
Jul 24 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 Python
Python作用域和名称空间的详细介绍
Apr 13 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图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
javascript列表框操作函数集合汇总
2013/11/28 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
Django实战之用户认证(初始配置)
2018/07/16 Python
Python3.5面向对象与继承图文实例详解
2019/04/24 Python
Python调用C语言程序方法解析
2020/07/07 Python
python 利用百度API识别图片文字(多线程版)
2020/12/14 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
大学生求职简历的自我评价
2013/10/14 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
工作作风承诺书
2014/08/30 职场文书
六查六看剖析材料
2014/10/06 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
岳庙导游词
2015/02/04 职场文书
英文慰问信
2015/02/14 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
Python学习之异常中的finally使用详解
2022/03/16 Python
分享Python异步爬取知乎热榜
2022/04/12 Python
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python