程序人生
django工作日志开发(三)
作者:邵波涛    时间:2016-08-24 浏览量:268

本例的基模板base.html,所有页面都要的信息写在该页面内。

{% load staticfiles %}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="description" content="内燃叉车信息平台" />
<title>内燃叉车信息平台</title>
<link type="text/css" rel="stylesheet" href="{% static 'css/css.css' %}" />
<link type="text/css" rel="stylesheet" href="{% static 'css/calendar.css' %}" />
<script type="text/javascript" src="{% static 'js/jquery-1.7.min.js' %}"></script>
    {% block custom_css %}{% endblock %}
    {% block custom_js %}{% endblock %}
</head>
<body>
<div class="header">
  <div class="top"> <img class="logo" src="{% static 'images/logo.jpg' %}" />
    <ul class="nav">
      <li ><a href="{% url 'todo' %}">首页</a></li>
	  <li ><a href="{% url 'topic' %}">通用信息</a></li>
    </ul>
  </div>
</div>
<div class="container">
  <div class="leftbar">
    <div class="lm01"> <img class="peptx" src="{% static 'images/22.png' %}" />
      <div class="pepdet">
        <p class="pepname">邵波涛</p>
        <p>内燃叉车所</p>
      </div>
      <div class="clear"></div>
    </div>    
  {% block mainbody %}
  {% endblock %}
</div>
<div class="footer"></div>
</body>
</html>

block custom_css中放置当前模板自己需要的css;block custom_js中放置当前模板自己需要的js,block mainbody中放在需要被继承的代码,还可以有更多的区块,本案简单,不多设置区块了。

{% extends 'base.html' %}
{% load staticfiles %}
{% block mainbody %}
<div class="mainbody">   
    <div class="rig_lm03">
      <div class="title">
        <h2>所有事项</h2>
      </div>
      <div class="detail">
        <div class="inner03">
          <div id="tabCot_product" class="zhutitab">
            <div class="tabContainer">
              <ul class="tabHead" id="tabCot_product-li-currentBtn-">
                <li ><a href="{% url 'todo' %}" title="待办任务" rel="1">待办任务</a><span class="grey_numb">{{ todo_list_u.count }}</span></li>
                <li ><a href="{% url 'ftodo' %}" title="已完成任务" rel="2">已完成任务</a><span class="grey_numb">{{ todo_list_f.count }}</span></li>
                <li class="currentBtn" ><a href="{% url 'alltodo' %}" title="所有任务" rel="3">所有任务</a><span class="red_numb">{{ todo_list_all.count }}</span></li>
              </ul>
              
              <div class="clear"></div>
            </div>
            <div id="tabCot_product_3" class="tabCot" >
            <table class="tabindex" width="100%" border="0" cellpadding="0" cellspacing="0">
                <tr>
                  <th width="10%" bgcolor="#f8f8f8" scope="col"><div align="center">分类</div></th>
                  <th width="21%" bgcolor="#f8f8f8" scope="col"><span class="titlab">事项名称</span></th>
                  <th width="22%" bgcolor="#f8f8f8" scope="col"><span class="titlab">登记时间</span></th>
                  <th width="21%" bgcolor="#f8f8f8" scope="col"><span class="titlab">处理人</span></th>
                  <th width="7%" bgcolor="#f8f8f8" scope="col"><span class="titlab">进度</span></th>
                  <th width="19%" bgcolor="#f8f8f8" scope="col">重要度</th>
                </tr>

                 {% for t in todo_list %}
                <tr>
                  <td bgcolor="#FFFFFF"><div align="center">{{ t.ttype }}</div></td>
                  <td class="datacol" bgcolor="#FFFFFF"><a href="{% url 'todoinfo' %}?id={{ t.id }}" target="_blank">{{ t.todo }}</a></td>
                  <td bgcolor="#FFFFFF">{{ t.pubtime| date:'Y-m-d' }}</td>
                  <td bgcolor="#FFFFFF">{{ t.user }}</td>
                  <td class="datacol" bgcolor="#FFFFFF">{{ t.get_flag_display }}</td>
                  <td class="czcol" bgcolor="#FFFFFF">{{ t.priority }}</td>
                </tr>
                  {% endfor %}
              </table>
              <div class="fanye">
                <div class="yem">
                    {% include 'pagination.html' %}
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  {% endblock %}

好了呈现页面有了,给页面数据,在views.py中定义。

# -*-coding: utf-8 -*-
#!/usr/bin/env python
#from __future__ import unicode_literals

from django.shortcuts import render
from django.core.paginator import Paginator,EmptyPage, InvalidPage, PageNotAnInteger
from .models import *
from django.contrib.auth.decorators import login_required

def todo(request):
    todo_list_all = Todo.objects.all()
    todo_list_f = todo_list_all.filter(flag=True)
    todo_list_u = todo_list_all.filter(flag=False)
    todo_list = getPage(request, todo_list_u)
    return render(request,'todo.html',locals())

def ftodo(request):
    todo_list_all = Todo.objects.all()
    todo_list_f = todo_list_all.filter(flag=True)
    todo_list_u = todo_list_all.filter(flag=False)
    todo_list = getPage(request, todo_list_f)
    return render(request,'ftodo.html',locals())

def alltodo(request):
    todo_list_all = Todo.objects.all()
    todo_list_f = todo_list_all.filter(flag=True)
    todo_list_u = todo_list_all.filter(flag=False)
    todo_list = getPage(request, todo_list_all)
    return render(request,'alltodo.html',locals())

def todoinfo(request):
    id = request.GET.get('id', None)
    todoinfo = Todo.objects.get(pk=id)
    return render(request,'todoinfo.html',locals())

def todoupdate(request):
    id = request.GET.get('id', None)
    if request.method == 'POST':
        todo = Todo.objects.get(pk=id)
        todotitle = request.POST['todo']
        treply = request.POST['treply']
        try:
            flag = request.POST['flag']
            todo.todo = todotitle
            todo.treply = treply
            todo.finishtime = timezone.now()
            todo.flag = flag
            todo.save()
        except Exception:
            todo.todo = todotitle
            todo.treply = treply
            todo.save()
    todoinfo = Todo.objects.get(pk=id)
    return render(request,'todoinfo.html',locals())

# 分页代码
def getPage(request, objcectlst):
    paginator = Paginator(objcectlst, 15)
    try:
        page = int(request.GET.get('page', 1))
        objcectlst = paginator.page(page)
    except (EmptyPage, InvalidPage, PageNotAnInteger):
        objcectlst = paginator.page(1)
    return objcectlst

每一个函数对应一个url请求,这与php之类的一致,locals()会把所有定义的变量传递到要显示的页面上,todo_list_all,todo_list_u,todo_list_f分别对应全部记录、未完成记录(flag=false),和已完成记录(flag=true);getPage是分页函数,第二参数是要分页的记录集。

再补充一下分页页面。

<div>
  <ul>
    {% if todo_list.has_previous %}
    <li><a href="?page={{ todo_list.previous_page_number }}">前一页</a></li>
    {% else %}
    <li><a>前一页</a></li>
    {% endif %}

    <li><a>{{ todo_list.number }}/{{ todo_list.paginator.num_pages }}</a></li>

    {% if todo_list.has_next %}
    <li><a href="?page={{ todo_list.next_page_number }}">后一页</a></li>
    {% else %}
    <li > <a>后一页</a></li>
    {% endif %}
  </ul>
</div>

发言请留称呼=>
本文留言
共有 1 条留言
  • 小鱼
    2017-04-08
    非常不错的文章,接触Django不长时间,正准备自己搞个小的工作日志系统系统练手,就搜过来了,感谢感谢,有些代码我想借鉴下,不知可否?
    回复:你好,能帮到你就好,没有问题。
扫一扫,手机浏览网站
友情链接
申请链接