前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python测试开发django-52.xadmin添加自定义的js

python测试开发django-52.xadmin添加自定义的js

作者头像
上海-悠悠
发布2019-05-06 15:04:25
1.2K0
发布2019-05-06 15:04:25
举报
文章被收录于专栏:从零开始学自动化测试

前言

我想使用xadmin在列表页每一行元素添加一个按钮,当点击这个按钮的时候,能发个请求出去,后台执行相关功能。于是想到添加自定义的javascript脚本能实现。 在/stackoverflow上找到这篇https://stackoverflow.com/questions/35772623/how-to-add-custom-javascript-to-django-xadmin, 可能版本不对应,依然解决不了我的需求,大概知道重写get_media方法可以解决。

实现功能

xadmin在列表页每一行元素添加一个按钮,当点击这个按钮的时候,能发个请求出去,后台执行相关功能,比如点执行按钮时候,发个请求出去

添加按钮,可以通过mark_safe方法插入html代码实现,主要困难是加载自己写的的javascript脚本了

get_media

在/xadmin/views/list.py目录找到ListAdminView(ModelAdminView)类,主要是查看get_media方法的使用

代码语言:javascript
复制
# /xadmin/views/list.py

    # Media
    @filter_hook
    def get_media(self):
        media = super(ListAdminView, self).get_media() + self.vendor('xadmin.page.list.js', 'xadmin.page.form.js')
        if self.list_display_links_details:
            media += self.vendor('xadmin.plugin.details.js', 'xadmin.form.css')
        return media

参考案例

在xadmin.py代码如下,使用self.vendor(‘xadmin.list.xxx.js’, ‘xadmin.form.css’)加载自定义的xadmin.list.xxx.js脚本

代码语言:javascript
复制
class ControlImage(object):
    # 显示
    list_display = ['name', 'url', 'add_time', '操作']

    def 操作(self, obj):
        # button = '<button id="", type="submit" class="default btn btn-primary hide-xs" name="_delete" data-loading-text="删除"><i class="fa fa-save"></i>删除</button>'
        button = '<p id="%s" class="default btn btn-primary hide-xs" onclick="click_action_info(\'%s\')">执行</p>'%(str(obj.name),str(obj.name))
        r = mark_safe(button)
        return r

    def get_media(self):
        # media is the parent's return value (modified by any plugins)
        media = super(ControlImage, self).get_media() + self.vendor('xadmin.page.list.js', 'xadmin.page.form.js')
        # if self.list_display_links_details:
        #     media += self.vendor('xadmin.plugin.details.js', 'xadmin.form.css')

        # xadmin.list.xxx.js是自己写的js脚本
        media += self.vendor('xadmin.list.xxx.js', 'xadmin.form.css')
        return media

        # media = super(ControlImage,self).get_media()
        # media.add_js(('js/content.js',))    # 这种方法行不通,会报找不到.add_js方法
        # return media

xadmin.site.register(UploadImage, ControlImage)

javascript脚本

table页html元素信息,每个”执行”按钮分配一个id,onclick属性传一个动态的id参数

代码语言:javascript
复制
......
<p id="11111" class="default btn btn-primary hide-xs" onclick="click_action_info('11111')">执行</p>

......
<p id="yoyo1" class="default btn btn-primary hide-xs" onclick="click_action_info('yoyo1')">执行</p>

......
<p id="yoyo2" class="default btn btn-primary hide-xs" onclick="click_action_info('yoyo1')">执行</p>

接下来把自己写的javascript脚本放到/xadmin/static/xadmin/js目录下

代码语言:javascript
复制
;function click_action_info(id){
    var x=id
    $.get("/weather_code/",
                {
                    city: x,
                    time: "2019-04-05"
                },
                function (result) {
                    alert("返回数据: \n" +x +"\n" + "reason:" + result.reason + "\n" + "weather_name:" + result.weather_name);
                });
    }

注意前面要加个分号(;),要不然不生效

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实现功能
  • get_media
  • 参考案例
  • javascript脚本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档