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实现的正则表达式功能入门教程【经典】
Jun 05 Python
python机器学习之神经网络(三)
Dec 20 Python
python机器学习实战之树回归详解
Dec 20 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
对matplotlib改变colorbar位置和方向的方法详解
Dec 13 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
Apr 23 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
python实现A*寻路算法
Jun 13 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
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
PHP开发微信支付的代码分享
2014/05/25 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
ThinkPHP路由详解
2015/07/27 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
js实现简单点赞操作
2020/03/17 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python三级菜单的实例
2017/09/13 Python
python 除法保留两位小数点的方法
2018/07/16 Python
NLTK 3.2.4 环境搭建教程
2018/09/19 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
用python实现名片管理系统
2020/06/18 Python
医院护士的求职信
2014/01/03 职场文书
揭牌仪式主持词
2014/03/19 职场文书
保护环境建议书300字
2014/05/13 职场文书
政风行风评议整改方案
2014/09/15 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
2015年春节标语口号
2014/12/09 职场文书
《落花生》教学反思
2016/02/16 职场文书
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js