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中for循环下的索引变量的作用域
Apr 15 Python
python制作最美应用的爬虫
Oct 28 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
opencv python图像梯度实例详解
Feb 04 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
python 如何停止一个死循环的线程
Nov 24 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 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模板中出现空行解决方法
2011/03/08 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
python多线程http下载实现示例
2013/12/30 Python
Python列表计数及插入实例
2014/12/17 Python
Python使用scrapy抓取网站sitemap信息的方法
2015/04/08 Python
Python实现单词翻译功能
2017/06/06 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
应届生法律求职信
2013/10/22 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
实验室标语
2014/06/21 职场文书
2015元旦节寄语
2014/12/08 职场文书
拾金不昧感谢信
2015/01/21 职场文书
交警失职检讨书
2015/01/26 职场文书
2015年环卫工作总结
2015/04/28 职场文书
2016年公司新年寄语
2015/08/17 职场文书
创业计划书之游泳馆
2019/09/16 职场文书