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中为feedparser设置超时时间避免堵塞
Sep 28 Python
Python数据结构之Array用法实例
Oct 09 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
Python发展史及网络爬虫
Jun 19 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
Python 读取 YUV(NV12) 视频文件实例
Dec 09 Python
Python实现汇率转换操作
May 03 Python
Python调用shell命令常用方法(4种)
May 11 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
Django如何在不停机的情况下创建索引
Aug 02 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安全配置
2006/12/06 PHP
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
Node.js 8 中的 util.promisify的详解
2017/06/12 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
大韩航空官方网站:Korean Air
2017/10/25 全球购物
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
标记环介质访问控制协议
2016/03/27 面试题
实习协议书
2015/01/27 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS