try: page = request.GET.get('page', 1) except PageNotAnInteger: page = 1 p = Paginator(servers, per_page=per_page, request=request) p_servers = p.page(page) start = (int(page)-1) * per_page return render(request, 'servers/server_list.html', {'p_servers': p_servers, 'start': start, 'search': search})用户手动选择每页显示的项目数量,应该怎么修改代码
时间: 2024-03-02 21:48:05 浏览: 76
您可以在视图函数中添加一个变量来存储用户选择的每页显示的项目数量,然后将其传递给Paginator的per_page参数。以下是修改后的代码示例:
```
def server_list(request):
servers = Server.objects.all()
search = request.GET.get('search', '')
# 用户选择每页显示的项目数量,默认为10
items_per_page = request.GET.get('items_per_page', 10)
# 使用用户选择的每页显示的项目数量初始化Paginator
p = Paginator(servers, per_page=items_per_page, request=request)
# 获取当前页码
page = request.GET.get('page', 1)
try:
p_servers = p.page(page)
except PageNotAnInteger:
p_servers = p.page(1)
except EmptyPage:
p_servers = p.page(p.num_pages)
# 计算起始位置
start = (int(page) - 1) * int(items_per_page)
return render(request, 'servers/server_list.html', {'p_servers': p_servers, 'start': start, 'search': search})
```
在模板中,您可以添加一个下拉列表来让用户选择每页显示的项目数量。例如:
```
<form method="get">
<label for="items_per_page">每页显示:</label>
<select name="items_per_page" id="items_per_page" onchange="this.form.submit()">
<option value="10" {% if items_per_page == 10 %}selected{% endif %}>10</option>
<option value="20" {% if items_per_page == 20 %}selected{% endif %}>20</option>
<option value="50" {% if items_per_page == 50 %}selected{% endif %}>50</option>
</select>
</form>
```
这样,用户就可以选择每页显示的项目数量,并且Paginator会根据用户的选择进行分页。
阅读全文