Django分页 搜索功能的实现

Django分页 搜索功能的实现

url.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('listing/', views.listing, name='listing'),
]

model.py

from django.db import models

class Contacts(models.Model):
    name = models.CharField(max_length=255)
    email = models.EmailField()

view.py

你可以在视图函数中使用 Django 的内置标签 form 来生成一个表单,然后在视图函数中处理这个表单。以下是一个例子:


from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

from django import forms

class ContactForm(forms.Form):
    page_number = forms.IntegerField(label='页数')

def listing(request):
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page

    page = request.GET.get('page')
    try:
        contacts = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        contacts = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        contacts = paginator.page(paginator.num_pages)

    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            page_number = form.cleaned_data['page_number']
            return redirect('listing', page=page_number)
    else:
        form = ContactForm()

    if request.method == 'GET' and 'search' in request.GET:
        query = request.GET.get('search')
        contact_list = Contacts.objects.filter(name__icontains=query)
        paginator = Paginator(contact_list, 25) # Show 25 contacts per page
        try:
            contacts = paginator.page(page)
        except PageNotAnInteger:
            # If page is not an integer, deliver first page.
            contacts = paginator.page(1)
        except EmptyPage:
            # If page is out of range (e.g. 9999), deliver last page of results.
            contacts = paginator.page(paginator.num_pages)

    return render(request, 'list.html', {'contacts': contacts, 'form': form})

前端页面

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    {% load static %}
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
</head>
<body>
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <a class="navbar-brand" href="#">My Site</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarNav">
            <ul class="navbar-nav">
                <li class="nav-item active">
                    <a class="nav-link" href="#">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">About</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Contact</a>
                </li>
            </ul>
        </div>
    </nav>

    {% block content %}{% endblock %}

    {% block scripts %}
        {% load static %}
        <script src="{% static 'js/jquery.min.js' %}"></script>
        <script src="{% static 'js/bootstrap.min.js' %}"></script>
    {% endblock %}
</body>
</html>

···

list.html

{% extends "base.html" %}

{% block content %}
  <h1>Contacts</h1>

  <form method="get">
    <input type="text" name="search" placeholder="搜索">
    <button type="submit">搜索</button>
  </form>

  <table class="table">
    <thead>
      <tr>
        <th>Name</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      {% for contact in contacts %}
        <tr>
          <td>{{ contact.name }}</td>
          <td>{{ contact.email }}</td>
        </tr>
      {% endfor %}
    </tbody>
  </table>

  {% bootstrap_pagination contacts url="?page=1" size="small" %}

  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">跳转</button>
  </form>

{% endblock %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yolo2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值