Django 分页
view.py
@login_require
def tasklist(request):
username = request.session.get("username", None)
taskinfolist = tasks.objects.all()
input_title = request.POST.get('title')
input_username = request.POST.get('username')
input_status = request.POST.get('status')
input_search_field = None
input_keyword = None
# print(input_title,input_username,input_status)
if request.method == "POST":
input_search_field = request.POST.get("search_field")
input_keyword = request.POST.get("keyword",None)
print(input_search_field,input_keyword)
if input_keyword != None:
"""标题检索"""
if input_search_field == "title":
taskinfolist = tasks.objects.all().filter(title__icontains=input_keyword)
"""作者检索"""
if input_search_field == "username":
taskinfolist = tasks.objects.all().filter(username=input_keyword)
"""状态检索"""
if input_search_field == "status":
status_code = choices_switch("GENDER_CHOICES1",input_keyword)
taskinfolist = tasks.objects.all().filter(status=status_code )
"""类型检索"""
if input_search_field == "tasktype":
tasktype_code = choices_switch("GENDER_CHOICES",input_keyword)
taskinfolist = tasks.objects.all().filter(tasktype=tasktype_code)
tasklist_json = tag_tagcolor(taskinfolist)
""""分页,把查询到的tasklist_json,我这转化为json,可不转"""
# 值1:所有的数据
# 值2:每一页的数据
# 值3:当最后一页数据少于n条,将数据并入上一页
paginator = Paginator(tasklist_json,10,3)
try:
# GET请求方式,get()获取指定Key值所对应的value值
# 获取index的值,如果没有,则设置使用默认值1
num = request.GET.get('index','1')
# 获取第几页
number = paginator.page(num)
except PageNotAnInteger:
# 如果输入的页码数不是整数,那么显示第一页数据
number = paginator.page(1)
except EmptyPage:
number = paginator.page(paginator.num_pages)
context = {"username":username,"tasklist_json":tasklist_json,"input_search_field":input_search_field,"input_keyword":input_keyword, 'page':number,'paginator':paginator}
return render(request,'task/tasklist.html',context)
html
<tbody>
{% for taskinfo in page.object_list %}
<tr>
<td>
<label class="lyear-checkbox checkbox-primary">
<input type="checkbox" name="ids[]" value="{{ taskinfo.id }}"><span></span>
</label>
</td>
<td>{{ taskinfo.title }}</td>
<td>
{% for tag in taskinfo.tags %}
<span class="label {{ tag |last}}">{{ tag |first }}</span>
{% endfor %}
</td>
<td>{{ taskinfo.username }}</td>
<td>{{ taskinfo.c_time }}</td>
<td>{{ taskinfo.s_time }}</td>
<td>{{ taskinfo.f_time }}</td>
<!-- <td><font class="text-warning">{{ taskinfo.get_status_display }}</font></td>
<td><font class="text-success">{{ taskinfo.get_tasktype_display }}</font></td> -->
<td><font class="text-warning">{{ taskinfo.status}}</font></td>
<td><font class="text-success">{{ taskinfo.tasktype }}</font></td>
<td>
<div class="btn-group">
<a class="btn btn-xs btn-default" href="/task/edittask?task_id={{ taskinfo.id }}" title="编辑" data-toggle="tooltip"><i class="mdi mdi-pencil"></i></a>
<a class="btn btn-xs btn-default" href="/task/add_task_point?task_id={{ taskinfo.id }}" title="创建小任务" data-toggle="tooltip"><i class="mdi mdi-format-list-bulleted"></i></a>
<a class="btn btn-xs btn-default" href="/task/taskinfo?task_id={{ taskinfo.id }}" title="任务详情" data-toggle="tooltip"><i class="mdi mdi-content-paste"></i></a>
<a class="btn btn-xs btn-default" href="#!" title="解决文档" data-toggle="tooltip"><i class="mdi mdi-book-open-page-variant"></i></a>
</div>
</td>
{% endfor %}
</tr>
</tbody>
</table>
<ul class="pagination">
{# 如果当前页还有上一页 #}
{% if page.has_previous %}
<li>
{# 点击a标签,跳转到上一页链接 ?index 为地址后面拼接的参数 #}
<a href="?index={{page.previous_page_number}}">上一页</a>
</li>
{% else %}
{# 如果没有上一页, 则上一页按钮不可点击 #}
<li class="disabled">
<a href="#">上一页</a>
</li>
{% endif %}
{% for page_number in paginator.page_range %}
{# 获取当前页的页码 #}
{% if page_number == page.number %}
{# 如果是当前页的话,选中 #}
<li class="active">
<a href="?index={{page_number}}">{{page_number}}</a>
</li>
{% else %}
<li>
<a href="?index={{page_number}}">{{page_number}}</a>
</li>
{% endif %}
{% endfor %}
{% if page.has_next %}
<li>
<a href="?index={{page.next_page_number}}">下一页</a>
</li>
{% else %}
<li class="disabled">
<a href="#">下一页</a>
</li>
{% endif %}
网友评论