django admin 添加自定义链接方式

背景

最近做项目开发出现一个需求,就是前端会发来用户对某一项内容的报错,报错信息中包含出错内容的id,为了方便管理,需要实现点击这个id直接转达相应内容的详情页面。

效果展示

解决

首先在django admin的列表中查看数据id所代表的链接

使用浏览器的检查元素功能查看点击该id所跳转的链接

现在我们知道点击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 添加自定义链接方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • django admin后管定制-显示字段的实例

    先说需求: 1.django 自带了admin后管,如果我们需要使用,只需把我们定义的models注册即可: 2.但如果只是简单注册,那显示的很简单,根本看不到每行记录的描述信息,全部以model object 形式显示,必须点击进去才能看到信息,太不方便,如下图: 1.显示关键信息 效果如下图,这样就好看多啦. 2.配置 在 admin.py 文件中配置一下就行. admin.py # Underwriter admin model class UnderwriterAdmin(admin.M

  • 屏蔽Django admin界面添加按钮的操作

    例如,我想去掉某个Model界面的增加按钮,如下图所示: 一般的做法是修改 template,但是,有没有更简便易行的方法呢?答案是肯定的. 只需要修改admin.py中对应的 ModelAdmin 即可. 下面是本人修改的代码: 补充知识:Django admin 列表每行后面添加审核按钮 我就废话不多说了,还是直接看代码吧! def pass_audit_str(self): parameter_str = 'id={}&status={}'.format(str(self.id), str

  • django admin 添加自定义链接方式

    背景 最近做项目开发出现一个需求,就是前端会发来用户对某一项内容的报错,报错信息中包含出错内容的id,为了方便管理,需要实现点击这个id直接转达相应内容的详情页面. 效果展示 解决 首先在django admin的列表中查看数据id所代表的链接 使用浏览器的检查元素功能查看点击该id所跳转的链接 现在我们知道点击admin页面跳转链接的格式了. 自定义widget 假如我们的内容id使用CharField字段存储,那么可以这样自定义一个widget HTML {% load myfileter

  • 在django admin中添加自定义视图的例子

    django admin提供了完善的用户管理和数据模型管理,方便实用.研究了一下在admin里面添加自己的页面. 在admin.py里继承django.contrib.admin.ModelAdmin基类 class FaceAdmin(admin.ModelAdmin): 然后在里面写自己的视图处理函数.基类里面的save_model和delete_model函数可以做数据对象的新建和删除的预处理和后处理.自建的函数如果要redirect到自己建的view,反向映射要包含admin:,写成 r

  • Django admin禁用编辑链接和添加删除操作详解

    禁用admin中models的编辑链接和添加删除按钮 方法如下: class MyModelAdmin(models.ModelAdmin): ... List_display_links = None #禁用编辑链接 def has_add_permission(self, request): # 禁用添加按钮 return False def has_delete_permission(self, request, obj=None): # 禁用删除按钮 return False def g

  • django admin 根据choice字段选择的不同来显示不同的页面方式

    我就废话不多说了,大家还是直接看代码吧! 一.举例 tip/tip.js var react = function () { if (django.jQuery('#id_tiptype').val() == 'content') { django.jQuery('#id_content').parent().parent().show(500); django.jQuery('#id_image').parent().parent().hide(500); django.jQuery('#id

  • Django admin model 汉化显示文字的实现方法

    1.将添加blog的后台基本操作 在blog文件夹下新建一个admin.py文件加入一下代码: from django.contrib import admin from djcms.apps.blog.models import Post, Category, Tag admin.site.register(Post) admin.site.register(Category) admin.site.register(Tag) 重启服务,再到浏览器上登录到后台,是不是增加了对blog的基本操作

  • 详解Django admin高级用法

    使用Django意味着后台框架的几乎所有内容都会和Django产生互动,排除功能全部手撸的情况. Django 后台admin有大量的属性和方法,拥有强大的功能和自定义能力.通过完整的代码来看Django admin的基础设置和高级用法,并结合form表单来实现深度自定义. 简单使用 如果只是使用admin自带的数据管理功能,只需要将模型注册到admin中,就可以实现. from django.contrib import admin admin.site.register(News) admi

  • Django Admin 实现外键过滤的方法

    说明和 Model 环境: ➜ python Python 3.6.3 |Anaconda custom (x86_64)| (default, Oct 6 2017, 12:04:38) [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin Type "help", "copyright", "credits" or "license" f

  • django admin管理工具自定义时间区间筛选器DateRangeFilter介绍

    django admin管理工具有很多好用的功能,例如搜索框.筛选器等,编码简单,功能强大. 但是常规的时间筛选有一定局限性,只能显示一定时间节点到当前时间这一段时间段内的筛选结果,做不到自由定义时间段筛选,本人找到了可以实现这一功能的插件,就是今天要介绍的DateRangeFilter. 注意: DateRangeFilter只适用于Django 1.4以上的版本. 插件安装 使用 pip或easy_install: pip install django-daterange-filter 修改

  • 给Django Admin添加验证码和多次登录尝试限制的实现

    Django自带的Admin很好用,但是放到生产环境总还差了点什么= = 看看admin的介绍: Django奉行Python的内置电池哲学.它自带了一系列在Web开发中用于解决常见问题或需求的额外的.可选工具.这些工具和插件,例如django.contrib.redirects都必须在settings中的INSTALLED_APPS处进行注册,有的还需要执行manage.py migrate命令,在数据库中创建一些数据表. Admin站点是Django有别于其它Web框架最重要的一点,并且非常

  • Django admin组件的使用

    admin admin 是 Django 自带的后台管理组件,你可以在 admin 中执行增删改查等操作. 它以可视化的方式让你来操纵模型表,十分的便捷. 基本使用 数据准备 如下,在 app01 中有一个这样的模型表: from django.db import models # Create your models here. class User(models.Model): user_id = models.AutoField(primary_key=True, verbose_name

随机推荐