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 %}