# 综合排序,分页,过滤展示 # 即可以排序后,再过滤,又可以过滤后,再排序,最后分页; # 1.在筛选的基础之上排序 # 筛选后的参数添加到排序的链接中; # table_obj_list.html {% get_filter_param admin_class %} # kingadmin_tag.py # 排序链接中添加筛选参数,先筛选再排序 @register.simple_tag def get_filter_param(admin_class,): filter_param = ‘‘ # 根据获取筛选条件的字典来判断,是否有筛选 if admin_class.filter_condtions: for k,v in admin_class.filter_condtions.items(): filter_param += ‘&%s=%s‘%(k,v) return filter_param # 2.在排序的基础之上筛选 # 将排序参数_o添加到筛选的提交表单; # 生成一个隐藏标签;放入当前排序字段; # table_obj_list,html <input type="hidden" name="_o" value="{{ current_order_field.keys.0 }}"> # 因为过滤功能一个提交表单,所以只要将name与value提交上去,就会添加到url中; # 因为在python3中keys()返回的是一个迭代器,而不是列表,所以上面没有返回值; # 写一个simple_tag; # kingadmin_tag.py # 获取当前排序字段 @register.simple_tag def get_order_field(current_order_field): # 将迭代器转换成列表,展示的字段名及索引 return list(current_order_field.values())[0] # 排序结果对过滤查询就影响吗? # 没有,只是一个URL上参数展示,表示操作已执行的状态; # 报错:list out of range # 原因:默认是没有排序的,但是值取了; # kingadmin_tag.py @register.simple_tag def get_order_field(current_order_field): # 如果有排序,则返回,没有就返回空; return list(current_order_field.values())[0] if current_order_field else ‘‘ # 3.注意一点,分页我们用的是第三方库pure-pagination,它对django自带的 # pagination做了一些增强功能的封装,生成的链接{{page.querystring}} # 会自动在其他功能的基础之上添加参数,与分页;