当用户登录成功后,首先看到的是他自己之前提交的任务列表,本篇将实现该页面。

视图(views.py)里定义如下:

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
@login_required
def tasklist(request):
username=request.user.username
if len(Dba.objects.filter(username=username)) == 0: #User is not DBA, only shows his/her own tasklist
userid=User.objects.filter(username=username)
lines = Task.objects.filter(creater=userid).order_by("-id")
else: #User is DBA, shows all tasklist
lines = Task.objects.order_by("-id")
paginator = Paginator(lines, 10)
page = request.GET.get('page')
try:
show_lines = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
show_lines = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
show_lines = paginator.page(paginator.num_pages)
return render_to_response('tasklist.html', RequestContext(request, {'lines': show_lines,}))

该视图的业务逻辑如下:

1)判断用户名,如果是普通用户,只显示他自己的任务列表;如果是DBA,则显示所有用户的任务列表。(从Task模型中获取数据)

2)调用Bootstrap的分页器Paginator,每页显示10行。

最终,该视图返回模板tasklist.html,其定义如下:

{% extends "base.html" %}

{% load bootstrap_toolkit %}

{% block content %}

    <h1>任务列表</h1>

    <table class="table table-striped table-hover">
<tr>
<td><strong>ID</strong></td>
<td><strong>提交者</strong></td>
<td><strong>创建时间</strong></td>
<td><strong>最后更新时间</strong></td>
<td><strong>状态</strong></td>
</tr>
{% for line in lines %}
<tr>
<td><a href="{% url 'dbrelease_app.views.taskdetail' %}?taskid={{ line.id }}">{{ line.id }}</a></td>
<td><a href="{% url 'dbrelease_app.views.taskdetail' %}?taskid={{ line.id }}">{{ line.creater.last_name }}{{ line.creater.first_name }}</a></td>
<td><a href="{% url 'dbrelease_app.views.taskdetail' %}?taskid={{ line.id }}">{{ line.createdtime|date:"Y-m-d H:i:s" }}</a></td>
<td><a href="{% url 'dbrelease_app.views.taskdetail' %}?taskid={{ line.id }}">{{ line.lastupdatedtime|date:"Y-m-d H:i:s" }}</a></td>
<td><a href="{% url 'dbrelease_app.views.taskdetail' %}?taskid={{ line.id }}">{{ line.state }}</a></td>
</tr>
</a>
{% endfor %}
</table> {% bootstrap_pagination lines url="/tasklist?page=1" align="center" size="large" %} {% endblock %}

上面的模板定义了5列(分别是ID、提交者、创建时间、最后更新时间和状态),每行上都加一个超链接,指向该Task的详细信息(对应的视图taskdetail,我们会在下一章讲述该视图)。

最终效果如下:

[Django实战] 第8篇 - 分页列表的更多相关文章

  1. [Django实战] 第3篇 - 用户认证(初始配置)

    当大家打开一个网站时,第一步做什么?大部分一定是先登录吧,所以我们就从用户认证开始. 打开用户认证 Django本身已经提供了用户认证模块,使用它可以大大简化用户认证模块的开发,默认情况下,用户认证模 ...

  2. [Django实战] 第4篇 - 用户认证(用户登录)

    今天来实现用户登录模块 首先,我们创建一个表单(forms.py): from django import forms from django.contrib.auth.models import U ...

  3. [Django实战] 第5篇 - 用户认证(修改密码)

    上一篇我们实现了用户认证系统的登录模块,这一篇实现修改密码模块. 同样地,我们首先得给修改密码创建表单(forms.py): class ChangepwdForm(forms.Form): oldp ...

  4. [Django实战] 第9篇 - 表单、视图、模型、模板的交互

    本章通过实现一个用户提交任务请求的页面,讲述表单.视图.模型.模板间的交互. 首先,我们需要定义一个表单(forms.py) class CreatetaskForm(forms.Form): cre ...

  5. 14、Django实战第14天:列表筛选功能

    今天完成的是点击这些条件进行机构的筛选 首先来完成城市:当用户点击城市的时候,我们自动给它加一个参数(city.id) 编辑organization.views.py 刷新页面,发现筛选功能已经OK了 ...

  6. Sping Boot入门到实战之入门篇(三):Spring Boot属性配置

    该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置.   传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...

  7. Django框架下的增强分页组件

    本文通过文章同步功能推送至博客园,显示排版可能会有所错误,请见谅! 描述:Django框架内置了分页功能,但其只能满足简单需求,难以实现复杂功能. 实现代码: #!/usr/bin/env pytho ...

  8. [Spring Cloud实战 | 第六篇:Spring Cloud Gateway+Spring Security OAuth2+JWT实现微服务统一认证授权

    一. 前言 本篇实战案例基于 youlai-mall 项目.项目使用的是当前主流和最新版本的技术和解决方案,自己不会太多华丽的言辞去描述,只希望能勾起大家对编程的一点喜欢.所以有兴趣的朋友可以进入 g ...

  9. 2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化 一篇搞定

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...

随机推荐

  1. BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )

    状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) ------------------------------------------------------- ...

  2. BZOJ 1021: [SHOI2008]Debt 循环的债务( dp )

    dp(i, j, k)表示考虑了前i种钱币(从小到大), Alice的钱数为j, Bob的钱数为k, 最小次数. 脑补一下可以发现, 只有A->B.C, B->A.C, C->A.B ...

  3. Arduino Micro USB库

    USBCore.cpp #define D_DEVICE(_class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_co ...

  4. 关于 rand() 函数返回值的值域的疑问

    <C语言参考手册>中关于 rand() 函数有如下描述. (1)rand() 函数的原型 int rand(void); (2)连续调用 rand 将返回 0 到 int 类型的最大可表示 ...

  5. openStack openSource CloudComputing

    <一,> ,OpenStack a few Core Compontents integration with openStack-keystone Identity service1.1 ...

  6. SGU 242 Student&#39;s Morning 网络流(水

    题目链接:contest=0&problem=242">点击打开链接 题意: 给定n个人,m个终点 以下n行表示每一个人能够去m个点. 每一个人仅仅能去一个点. 输出随意一个方 ...

  7. Android基础之在Eclipes中关联SDK源码和查看SDK源码

    在进行Android应用开发的时候,我们有时候需要查看某个类或接口的源码从而了解如何去使用一个类或者实现一个接口,查看源码有助于我们的学习某个封装的类的底层是如何实现的,这样可以帮助我们掌握类或者接口 ...

  8. web浏览器中的javascript 1

    Html 文档嵌入客户端有4种方式. 1. 内联.放置在<script>和</script>标签对之间. 2.放置在<script>标签的src属性指定的外部文件中 ...

  9. mvc模式jsp+servel+dbutils oracle基本增删改查demo

    mvc模式jsp+servel+dbutils oracle基本增删改查demo 下载地址

  10. [Jobdu] 题目1511:从尾到头打印链表——单链表的倒置输出

    // ListNode typedef struct LNode { int key; struct LNode *next; }LNode;   分析:这是一道很有意思的面试题,此题以及此题的变体经 ...