Dango Web 开发指南 学习笔记 3

ListView 学习

今天的目标是想完成我的任务列表功能。ListView可以很好的完成这个功能。它是使用方法非常简单好用。

1 添加TaskView

首先第一步,在views.py中添加TasView继承自ListView

class TaskView(generic.ListView):
    template_name = 'task_manager/task.html'
    context_object_name = 'latest_task_list'
    paginate_by = 10
    model = Task

    def get_queryset(self):
        if 'name' in self.request.GET:
            name = self.request.GET['name']
            return Task.objects.filter(name__contains = name)
        else:
            return Task.objects.all()

解释一下这段代码的含义。我们只要设置model就可以和实际的数据库实体进行绑定。这样就可以具备查询数据库的能力了。context_object_name指定页面使用的对象。通过它我们就可以在页上进行渲染了。paginate_by是指分页的大小,10就是一页显示10条记录。template_name用于指定模板。好了。有了这几个属性。就可以完成一个带分页的页面了。get_queryset这个方法是为了实现查询而重写的。如果不带查询的话。这个方法可以不要。我们通过request传过来的name来进行查询。其中contains是like的意思。

2 添加url链接

下面在urls.py中添加链接。用于定位url

url(r'^task$', views.TaskView.as_view(), name='task'),

3 添加模板

<table class="table table-condensed table-bordered">
<tr>
    <th>编号</th>
    <th>名称</th>
    <th>命令</th>
    <th>参数</th>
    <th>状态</th>
    <th>结果</th>
    <th>开始</th>
    <th>结束</th>
</tr>
{% for task in latest_task_list %}
    <tr>
        <td>{{ task.id }}</td>
        <td>{{ task.name }}</td>
        <td>{{ task.cmd }}</td>
        <td>{{ task.args }}</td>
        <td>{{ task.status }}</td>
        <td>{{ task.result }}</td>
        <td>{{ task.begin }}</td>
        <td>{{ task.end }}</td>
    </tr>
{% endfor %}
</table>

<div>
    <ul class="pagination">
       <li><a href="{{ request.path }}?page=1"><<</a></li> 
       {% if page_obj.has_previous %}
       <li><a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">上一页</a></li>
       {% else %}
       <li><a>上一页</a></li>
       {% endif %}
       {% if page_obj.has_next %}
       <li><a href="{{ request.path }}?page={{ page_obj.next_page_number }}">下一页</a></li>
       {% else %}
       <li><a>下一页</a></li>
       {% endif %}
       <li><a href="{{ request.path }}?page={{ page_obj.paginator.num_pages }}">>></a></li>
    </ul>
</div>

说明一下,table部分是用由显示内容的。pagination是分页。

4 效果

好了,有了上面的代码。就完成了这个功能的开发。还是非常好用的。但是在学习这个的过程中也发现了一些问题。dango是一个很好的框架。文档也很全面,但是实际项目和手册还是有一定区别的。没有一个真正项目的学习,很难将这些功能应用好。而市面上的书大部分都是好多年前的了。帮助有但是不大。使用新版本还容易产生奇异,学习开源一直面临这个问题。也不知道有没有什么好的办法。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值