Django之分页与搜索分页

ruike
2019-05-14 / 0 评论 / 3 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年01月09日,已超过543天没有更新,若内容或图片失效,请留言反馈。

一、分页

代码如下
vim views.py

from django.core.paginator import Paginator

def property_list(request):
    messages = models.ProdDetail.objects.all()

    limit = 25
    paginator = Paginator(messages, limit)  # 按每页25条分页
    page = request.GET.get('page', '1')  # 默认跳转到第一页
    result = paginator.page(page)

    return render(request, 'lists.html', {'contacts': result})

vim lists.html

<div class="layui-card-body ">
    <div class="page">
        <div>
            {% if contacts.has_previous %}
                <a class="prev" href="?page=1">&lt;&lt;</a>
                <a class="prev" href="?page={{ contacts.previous_page_number }}">上一页</a>
            {% else %}
                <a class="prev">&lt;&lt;第一页</a>
            {% endif %}
            <span class="current">第{{ contacts.number }}页/共{{ contacts.paginator.num_pages }}页</span>
            {% if contacts.has_next %}
                <a class="next" href="?page={{ contacts.next_page_number }}">下一页</a>
                <a class="next" href="?page={{ contacts.paginator.num_pages }}">&gt;&gt;</a></div>
            {% else %}
                <a class="next-off">最后页&gt;&gt;</a>
            {% endif %}
        </div>
    </div>

2、搜索的分页

在进行搜索时,下一页时因为是新的页面,所以搜索参数并没有传到新的页面,导致结果没回传,所以我们需要一个方法来传递搜索参数。
代码如下:
vim views.py

def property_list(request):
    # 接受get参数
    userid = request.GET.get('userid')
    name = request.GET.get('name')
    prodsn = request.GET.get('prodsn')
    search = {}
    getmathod = ''
    if userid:
        # 模糊搜索
        search['user_id__icontains'] = userid
        # 搜索参数的保存传递
        getmathod += ('&userid=%s' % userid)
    if name:
        search['name__icontains'] = name
        getmathod += ('&name=%s' % name)
    if prodsn:
        search['s_sn__icontains'] = prodsn
        getmathod += ('&prodsn=%s' % prodsn)

    messages = models.ProdDetail.objects.filter(**search)
    limit = 25
    paginator = Paginator(messages, limit)  # 按每页25条分页
    page = request.GET.get('page', '1')  # 默认跳转到第一页
    result = paginator.page(page)
    # 将原来的get请求封装后返回给前端
    return render(request, 'lists.html', {'contacts': result, 'getmathod': getmathod})
  • 将getmathod传递给前端,加在page href后:=={{ getmathod }}==

vim lists.html

{% if contacts.has_previous %}
    <a class="prev" href="?page=1{{ getmathod }}">&lt;&lt;</a>
    <a class="prev" href="?page={{ contacts.previous_page_number }}{{ getmathod }}">上一页</a>
{% else %}
    <a class="prev">&lt;&lt;第一页</a>
{% endif %}
    <span class="current">第{{ contacts.number }}页/共{{ contacts.paginator.num_pages }}页</span>
{% if contacts.has_next %}
    <a class="next" href="?page={{ contacts.next_page_number }}{{ getmathod }}">下一页</a>
    <a class="next" href="?page={{ contacts.paginator.num_pages }}{{ getmathod }}">&gt;&gt;</a></div>
{% else %}
    <a class="next-off">最后页&gt;&gt;</a>
{% endif %}
0

评论 (0)

取消