class UserInfoHandler(StartHandler):
  .......
# 批量操作功能的列表,添加则显示, 使用此功能。需要将StartHandler.display_checkbox 添加到list_display 中
action_list = [StartHandler.action_multi_delete, StartHandler.action_multi_init]
  .......
class StartHandler(object):
  ........
def action_multi_delete(self, request, *args, **kwargs):
'''批量删除( 如果想要定制,执行成功后的返回值,那么就为这个函数,设置返回值就可以)'''
self.model_class.objects.filter(pk__in=request.POST.getlist("pk")).delete()
# return redirect("http://www.baidu.com")
action_multi_delete.text = "批量删除" # 用户自定制,是否使用该功能。 只要在子类中的 action_list=[StarkHandler.multi_init] 就可以使用该功能
def action_multi_init(self, request, *args, **kwargs):
'''批量初始化'''
pass
action_multi_init.text = "批量初始化"
# 如果像模板中,传递一个函数的话,他就会自动的执行一边。 从而前端的页面也因为这个原因,拿不到 text 的值。
# 所以就需要在后端把这个 action_list 处理成一个字典。这件事由基类完成 {func.__name__: func.text for func in action_list} def get_list_display(self):
........ # ####################1. 处理 Action ######################
action_list = self.get_action_list()
action_dict = {func.__name__: func.text for func in action_list} # func.__name__获取函数名, func.text获取函数文本
if request.method == "POST":
action_func_name = request.POST.get("action")
if action_func_name and action_func_name in action_dict: # 前端发送过来的name 必须要在 action_dict中。
action_respons = getattr(self, action_func_name)(request, *args, **kwargs)
if action_respons:
return action_respons
.........       return render(request, "stark/changelist.html",
{"header_list": header_list, "data_list": data_list,
"body_list": body_list,
"pager": pager,
"add_btn": add_btn,
"search_list": search_list,
"search_value": search_value,
"action_dict": action_dict}) action_list = []
def get_action_list(self):
return self.action_list

D:\prev_new_stark\stark\servers\start_v1.py

标红位置的, 部分就是。 处理此批量操作的。 功能:

{% extends "layout.html" %}
{% block content %}
.......<form action="" method="post">
{% csrf_token %}
{% if action_dict %}
<div style="float: left; margin: 0 10px 5px 0">
<div class="form-inline">
<div class="form-group">
<select name="action" id="" class="form-control">
<option value="">请选择操作</option>
{% for func_name, func_text in action_dict.items %}
<option value="{{ func_name }}">{{ func_text }}</option>
{% endfor %}
</select>
<input type="submit" name="" value="执行" class="btn-success btn">
</div>
</div>
</div>
{% endif %}
{% if add_btn %}
<div style="float: left">{{ add_btn|safe }}</div>
{% endif %} <table class="table table-bordered">
<thead>
<tr>
{% for head in header_list %}
<th>{{ head }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in body_list %}
<tr>
{% for ele in row %}
<td>{{ ele }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</form>
</div>
......
{% endblock %}

此部分, 使用的知识点:

# 如果向模板中,传递一个函数的话,他就会自动的执行一边。 从而前端的页面也因为这个原因,拿不到 text 的值。
# 所以就需要在后端把这个 action_list 处理成一个字典。这件事由基类完成 {func.__name__: func.text for func in action_list}

{func.__name__: func.text for func in action_list}
简单的字典生成式。
action_list 中循环出,每一个函数对象。  func.__name__ 获取这个函数的函数名。 func.text 获取这个函数的文本信息!
前端中:

{% for func_name, func_text in action_dict.items %}
<option value="{{ func_name }}">{{ func_text }}</option>
{% endfor %}
使用  items 方法。  获取到, 字典中的  key 和 value。  也就是函数名, 和函数文本。

POST 提交时,将 函数名,提交给后台。 后台通过反射的 方式。 找到这个 函数。 并执行。

并且 该函数, 也可以有返回值。 自定制批量操作成功,之后 可以跳转到,那个页面。

stark组件开发之批量操作的更多相关文章

  1. stark组件开发之列表页面定制列

    先看一张页面展示的效果图: 看一看我的  model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...

  2. stark组件开发之列表页面应用示例

    已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把!  应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的  <a href="/ ...

  3. stark组件开发之添加功能实现

    添加功能,还是使用, form 组件来完成!  并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...

  4. stark组件开发之分页

    """ 分页组件 """ class Pagination(object): def __init__(self, current_page ...

  5. stark组件开发之组合搜索页面效果和 URL

    页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...

  6. stark组件开发之组合搜索实现思路

    - 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q()  函数. 来实现.  搜索是一个大的问题点. -  要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...

  7. stark组件开发之关键搜索

    - 模糊搜索: 在页面生成一个表单.  以get 方式, 将数据提交到.当前查看页面. 后台接收数据,然后进行筛选过滤. 着个也需要,用户自定制!   定义一个  search_list  这个值,默 ...

  8. stark组件开发之排序

    class StartHandler(object): .......... ordered_list = [] # 排序规则由 用户指定. def get_ordered_list(self): r ...

  9. stark组件开发之编辑功能实现

    编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的  记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: class UserInfoHandler(StartHandler ...

随机推荐

  1. fges

    基本用法: fgets函数用来从文件中读入字符串.fgets函数的调用形式如下:fgets(str,n,fp):此处,fp是文件指针:str是存放在字符串的起始地址:n是一个int类型变量.函数的功能 ...

  2. SVN简单使用

    如果是window操作系统,默认安装.右键菜单就会有显示SVN 如果已经配置好SVN,直接确定既可以检出. 如果没有配置,那么会显示下面的验证: 输入用户名和密码即可

  3. Spring生态研习【四】:Springboot+mybatis(探坑记)

    这里主要是介绍在springboot里面通过xml的方式进行配置,因为xml的配置相对后台复杂的系统来说,能够使得系统的配置和逻辑实现分离,避免配置和代码逻辑过度耦合,xml的配置模式能够最大限度的实 ...

  4. Hadoop-HBASE 热添加新节点

    Hadoop-HBASE 热添加新节点 环境:192.168.137.101 hd1192.168.137.102 hd2192.168.137.103 hd3192.168.137.104 hd4四 ...

  5. jekins构建触发器详解-日程表的使用

    日程表参数解释如下: 第一个参数代表的是分钟 minute,取值 0~59: 第二个参数代表的是小时 hour,取值 0~23: 第三个参数代表的是天 day,取值 1~31: 第四个参数代表的是月 ...

  6. Padavan老毛子固件:17CE插件集成

    Padavan老毛子固件:17CE插件集成 1.老毛子路由设置:系统管理-服务-启动SSH服务器     以下链接下载 "winscp" http://down.orsoon.co ...

  7. Windows配置ffmpeg

    一.ffmpeg简介 ffmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案. 支持操作系统: ...

  8. Java中final关键字修饰变量、方法、类的含义是什么

    Java中的关键字final修饰变量.方法.类分别表示什么含义? 先看一个简单的介绍 修饰对象 解释说明 备注 类 无子类,不可以被继承,更不可能被重写. final类中的方法默认是final的 方法 ...

  9. Core Graphices 获取上下文

    Core Graphices 获取上下文的三种方式: 1.自定义view 重写view 的 drawRect:(CGRect)rect方法 - (void)drawRect:(CGRect)rect ...

  10. redis持久化 (rdb

    RDB(快照持久化) RDB(redis database),可以理解为快照/内存快照,RDB持久化过程是将当前进程中的数据生成快照存储到硬盘中 触发机制RDB持久化的触发机制分为两种,手动触发和自动 ...