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 提交时,将 函数名,提交给后台。 后台通过反射的 方式。 找到这个 函数。 并执行。

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

最新文章

  1. Android新权限机制 AppOps
  2. Html 之div+css布局之css选择器
  3. 面试准备 - C# 版本的树状数组
  4. [转载] 1. JebAPI 之 jeb.api
  5. 2015-11-04 asp.net 弹出式日历控件 选择日期 Calendar控件
  6. 【bzoj1018】堵塞的交通
  7. [codevs4247]奇特的生物
  8. mvc 的 OutputCache
  9. escape encodeURI encodeURIComponent区别
  10. POJ3243 EXT-BSGS算法
  11. Kafka Frequently Asked Questions
  12. DBLookupCombobox实现下拉联动
  13. MongoDB分片(Sharding)技术
  14. 键盘监听事件KeyListener
  15. Apache按天截断日志工具,无法生成访问日志
  16. Android app widget中实现跑马灯效果(非widget部件也实用)
  17. Biorhythms(中国剩余定理)
  18. 《C++ Primer Plus》读书笔记之八—对象和类
  19. 从一个多项目Web工程看Eclipse如何导入Gradle项目
  20. 搭建markdown图床-腾讯云COS

热门文章

  1. ssh 制作免密登录(免密登录多台服务器)
  2. Java多态(非常重要)
  3. 如何系统学习知识图谱-15年+IT老兵的经验分享
  4. ubuntu安装nginx及其默认目录结构
  5. 廖雪峰Java6 IO编程-3Reader和Writer-2Writer
  6. 学习 MeteoInfo二次开发教程(四)
  7. Java笔记Spring(二)
  8. leetCode26.删除排序数组中的重复项
  9. Android 开发 AlarmManager 定时器
  10. nginx gunicorn 部署flask,带参数链接不可用的现象(笔记)