Python中Django如何设置分页的第一页和其他页使用不同的HTML模板
null
Python中Django如何设置分页的第一页和其他页使用不同的HTML模板
3 回复
在Django里,你可以用Paginator和Page对象来实现这个需求。关键是在视图里判断当前页码,然后根据页码选择不同的模板。
下面是个完整的例子:
首先,在views.py里:
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render
from .models import YourModel # 换成你的模型
def my_view(request):
object_list = YourModel.objects.all()
paginator = Paginator(object_list, 10) # 每页10条
page = request.GET.get('page')
try:
objects = paginator.page(page)
except PageNotAnInteger:
# 如果page不是整数,显示第一页
objects = paginator.page(1)
except EmptyPage:
# 如果page超出范围,显示最后一页
objects = paginator.page(paginator.num_pages)
# 判断是否第一页,选择不同模板
if objects.number == 1:
template_name = 'first_page.html'
else:
template_name = 'other_pages.html'
return render(request, template_name, {'objects': objects})
然后创建两个模板文件:
first_page.html:
<!DOCTYPE html>
<html>
<head>
<title>第一页</title>
</head>
<body>
<h1>这是第一页的特殊样式</h1>
{% for obj in objects %}
<p>{{ obj }}</p>
{% endfor %}
{% if objects.has_next %}
<a href="?page={{ objects.next_page_number }}">下一页</a>
{% endif %}
</body>
</html>
other_pages.html:
<!DOCTYPE html>
<html>
<head>
<title>其他页</title>
</head>
<body>
<h1>这是第{{ objects.number }}页</h1>
{% for obj in objects %}
<p>{{ obj }}</p>
{% endfor %}
{% if objects.has_previous %}
<a href="?page={{ objects.previous_page_number }}">上一页</a>
{% endif %}
{% if objects.has_next %}
<a href="?page={{ objects.next_page_number }}">下一页</a>
{% endif %}
</body>
</html>
简单说就是判断页码然后选模板。
- urls 里面配置正则匹配,第一页和后面配置不同的 view
2. view 里判断页号,返回不同的模板
问问题前思考下好吗?
那要看你是后端分页还是前端分页

