返回顶部

客户关系管理系统(三)

分页的bug修复

在king_admin.py中把 list_per_page = 2时,分页在点击下一页的时候会出现bug

 

点击下一页

出现的bug如下所示:

 

 出现的bug原因是因为在前端中的a标签下一页中的链接是

 

 把page=2当做查询的条件放到后端视图函数中进行查询了

 解决的思路是,在a标签中加入过滤的条件filter_condition,然后后端查询的时候把page的的字段给过滤掉

在table_obj.html中把filter_condtions加入生成自定义标签中

{% render_page_ele  loop_counter query_sets filter_condtions %}

 

在自定义标签tags.py中的 render_page_ele 中把过滤的条件filter_condtions当做参数循环遍历加入a标签中,红色的部分是新添加的内容

代码如下:

@register.simple_tag
def render_page_ele(loop_counter, query_sets, filter_condtions):
    filters = ''
    for k, v in filter_condtions.items():
        filters += "&%s=%s" % (k, v)

    #  query_sets.number 当前的页数
    if abs(query_sets.number - loop_counter) <= 2:
        ele_class = ""
        if query_sets.number == loop_counter:
            ele_class = "active"
        ele = '''<li class="%s"><a href="?page=%s%s">%s</a></li>''' %(ele_class,loop_counter,filters,loop_counter)


        return mark_safe(ele)

    return ''
View Code

 

还需要做的一步就是在后端中把page的字段给过滤掉

 修改utils.py中table_filter函数,如果出现page字段就给过滤掉

完整代码如下:

def table_filter(request,admin_class):
    '''进行条件过滤并返回过滤后的数据'''
    filter_conditions = {}
    for k,v in request.GET.items():
        if k=='page':
            continue
        if v:
            filter_conditions[k] =v
    print(filter_conditions)
    return admin_class.model.objects.filter(**filter_conditions),filter_conditions
View Code

 

这时点击第2页就不会出错了 

 

点击下一页还是会报同样的上述错误。

 加入总共查询到多少条数据,在 table_obj.html中的tbody上加入以下的代码

 

  <tfoot>
       <tr>
          <td>总计{{ query_sets.paginator.count }}条</td></tr>
  </tfoot>

 刷新页面如下

 

 

posted @ 2018-02-07 09:56  Crazymagic  阅读(191)  评论(0)    收藏  举报