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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
Python中关于Sequence切片的下标问题详解
Jun 15 Python
浅谈Python中的可变对象和不可变对象
Jul 07 Python
Python实现线程状态监测简单示例
Mar 28 Python
Pandas标记删除重复记录的方法
Apr 08 Python
Python PO设计模式的具体使用
Aug 16 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
python不同系统中打开方法
Jun 23 Python
python/golang 删除链表中的元素
Sep 14 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 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学习之PHP表达式
2006/10/09 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
jquery tools系列 expose 学习
2009/09/06 Javascript
10个实用的脚本代码工具
2010/05/04 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
python类共享变量操作
2020/09/03 Python
python使用ctypes库调用DLL动态链接库
2020/10/22 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
房屋租赁合同协议书范本
2014/10/19 职场文书
护理工作个人总结
2015/03/03 职场文书
Python编程super应用场景及示例解析
2021/10/05 Python
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL