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读取json文件并将数据插入到mongodb的方法
Mar 23 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
Python OS模块常用函数说明
May 23 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
对Python信号处理模块signal详解
Jan 09 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
python爬虫之爬取笔趣阁小说
Apr 22 Python
教你怎么用Python生成九宫格照片
May 20 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实现文件上传和多文件上传
2015/12/24 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
javascript Demo模态窗口
2009/12/06 Javascript
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
div层的移动及性能优化
2010/11/16 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
浅谈js的异步执行
2016/10/18 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
几种响应式文字详解
2017/05/19 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
Python实现购物车购物小程序
2018/04/18 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
python 函数中的参数类型
2020/02/11 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Python3获取cookie常用三种方案
2020/10/05 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
简历的个人自我评价范文
2014/01/03 职场文书
实践单位评语
2014/04/26 职场文书
秋天的图画教学反思
2014/05/01 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
个人年底工作总结
2015/03/10 职场文书
同事打架检讨书
2015/05/06 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python