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中random模块用法实例分析
May 19 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
Python实现时间序列可视化的方法
Aug 06 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
TensorFLow 变量命名空间实例
Feb 11 Python
Numpy一维线性插值函数的用法
Apr 22 Python
基于Python的Jenkins的二次开发操作
May 12 Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 Python
keras实现多种分类网络的方式
Jun 11 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
解决pytorch 模型复制的一些问题
Mar 03 Python
Python词云的正确实现方法实例
May 08 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 utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
2013/04/08 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
Python函数生成器原理及使用详解
2020/03/12 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
幼儿园秋季开学寄语
2014/08/02 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
赢在中国观后感
2015/06/02 职场文书
2016年公司新年寄语
2015/08/17 职场文书
六年级作文之预言作文
2019/10/25 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
Python中如何处理常见报错
2022/01/18 Python
SQL Server 中的事务介绍
2022/05/20 SQL Server
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS