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读写ini文件示例(python读写文件)
Mar 25 Python
python分析apache访问日志脚本分享
Feb 26 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
Python类的动态修改的实例方法
Mar 24 Python
python算法演练_One Rule 算法(详解)
May 17 Python
Python+Django搭建自己的blog网站
Mar 13 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
Nov 14 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
python中温度单位转换的实例方法
Dec 27 Python
python 下载文件的几种方式分享
Apr 07 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 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
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
javascript动态加载二
2012/08/22 Javascript
JS 控件事件小结
2012/10/31 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
js实现列表按字母排序
2020/08/11 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
新加坡交友网站:be2新加坡
2019/04/10 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
服装设计专业毕业生求职信
2014/04/09 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
2015年学校总务处工作总结
2015/05/19 职场文书
赡养老人协议书范本
2015/08/06 职场文书
导游词之昭君岛
2020/01/17 职场文书
python常见的占位符总结及用法
2021/07/02 Python
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android