Django 分页

2019-06-10  本文已影响0人  无处安放的躁动

Django 分页

view.py

@login_require
def tasklist(request):
    username = request.session.get("username", None)
    taskinfolist = tasks.objects.all()
    input_title = request.POST.get('title')
    input_username = request.POST.get('username')
    input_status = request.POST.get('status')
    input_search_field = None
    input_keyword = None
    # print(input_title,input_username,input_status)
    if request.method == "POST":
        input_search_field = request.POST.get("search_field")
        input_keyword = request.POST.get("keyword",None)
        print(input_search_field,input_keyword)
        if input_keyword != None:
            """标题检索"""
            if input_search_field == "title":
                taskinfolist = tasks.objects.all().filter(title__icontains=input_keyword)
            """作者检索"""
            if input_search_field == "username":
                taskinfolist = tasks.objects.all().filter(username=input_keyword)
            """状态检索"""
            if input_search_field == "status":
                status_code = choices_switch("GENDER_CHOICES1",input_keyword)
                taskinfolist = tasks.objects.all().filter(status=status_code )
            """类型检索"""
            if input_search_field == "tasktype":
                tasktype_code = choices_switch("GENDER_CHOICES",input_keyword)
                taskinfolist = tasks.objects.all().filter(tasktype=tasktype_code)

    tasklist_json = tag_tagcolor(taskinfolist)


    """"分页,把查询到的tasklist_json,我这转化为json,可不转"""
    # 值1:所有的数据
    # 值2:每一页的数据
    # 值3:当最后一页数据少于n条,将数据并入上一页
    paginator = Paginator(tasklist_json,10,3)
    try:
        # GET请求方式,get()获取指定Key值所对应的value值
        # 获取index的值,如果没有,则设置使用默认值1
        num = request.GET.get('index','1')
        # 获取第几页
        number = paginator.page(num)
    except PageNotAnInteger:
        # 如果输入的页码数不是整数,那么显示第一页数据
        number = paginator.page(1)
    except EmptyPage:
        number = paginator.page(paginator.num_pages)

    context = {"username":username,"tasklist_json":tasklist_json,"input_search_field":input_search_field,"input_keyword":input_keyword, 'page':number,'paginator':paginator}
    return render(request,'task/tasklist.html',context)

html

                    <tbody>
                      {% for taskinfo in page.object_list %}
                      <tr>
                        <td>
                          <label class="lyear-checkbox checkbox-primary">
                            <input type="checkbox" name="ids[]" value="{{ taskinfo.id }}"><span></span>
                          </label>
                        </td>
                        <td>{{ taskinfo.title  }}</td>
                        <td>
                          {% for tag in taskinfo.tags  %}
                        <span class="label {{ tag |last}}">{{ tag |first  }}</span>
                         {% endfor %}
                        </td>
                        <td>{{ taskinfo.username }}</td>
                        <td>{{ taskinfo.c_time }}</td>
                        <td>{{ taskinfo.s_time }}</td>
                        <td>{{ taskinfo.f_time }}</td>
                        <!-- <td><font class="text-warning">{{ taskinfo.get_status_display }}</font></td>
                        <td><font class="text-success">{{ taskinfo.get_tasktype_display }}</font></td> -->
                        <td><font class="text-warning">{{ taskinfo.status}}</font></td>
                        <td><font class="text-success">{{ taskinfo.tasktype }}</font></td>
                        <td>
                          <div class="btn-group">
                            <a class="btn btn-xs btn-default" href="/task/edittask?task_id={{ taskinfo.id }}" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>
                            <a class="btn btn-xs btn-default" href="/task/add_task_point?task_id={{ taskinfo.id }}" title="创建小任务" data-toggle="tooltip"><i class="mdi mdi-format-list-bulleted"></i></a>
                            <a class="btn btn-xs btn-default" href="/task/taskinfo?task_id={{ taskinfo.id }}" title="任务详情" data-toggle="tooltip"><i class="mdi mdi-content-paste"></i></a>
                            <a class="btn btn-xs btn-default" href="#!" title="解决文档" data-toggle="tooltip"><i class="mdi mdi-book-open-page-variant"></i></a>
                          </div>
                        </td>
                        {% endfor %}
                      </tr>
                    </tbody>
                  </table>




                <ul class="pagination">
                  {# 如果当前页还有上一页 #}
                  {% if page.has_previous %}
                      <li>
                          {# 点击a标签,跳转到上一页链接 ?index  为地址后面拼接的参数 #}
                          <a href="?index={{page.previous_page_number}}">上一页</a>
                      </li>
                  {% else %}
                      {# 如果没有上一页, 则上一页按钮不可点击 #}
                      <li class="disabled">
                          <a href="#">上一页</a>
                      </li>
                  {% endif %}
                  {% for page_number in paginator.page_range %}
                  {# 获取当前页的页码 #}
            {% if page_number == page.number %}
                {# 如果是当前页的话,选中 #}
                <li class="active">
                    <a href="?index={{page_number}}">{{page_number}}</a>
                </li>
            {% else %}
                <li>
                    <a href="?index={{page_number}}">{{page_number}}</a>
                </li>
            {% endif %}
        {% endfor %}

        {% if page.has_next %}
            <li>
                <a href="?index={{page.next_page_number}}">下一页</a>
            </li>
        {% else %}
        <li class="disabled">
            <a href="#">下一页</a>
        </li>
        {% endif %}
上一篇 下一篇

猜你喜欢

热点阅读