Django 如何向模板输出复杂信息

         django框架使用了模板技术,通过context上下文对象把数据传输到模板,然后在模板中通过变量名字和点记法再把数据显示出来。那么当views模块里含有需要复杂数据结构来表达的信息的时候,应该怎么来向模板传输信息呢?

 

        假设现在从数据库里取出了一张关于人员考勤记录的二维表,人员数量是可变的,日期跨度也是可变的,每一天的信息含有每个员工是否有来上班,该天是否是周末等信息,那么要如何把这样的2维信息组织起来装进context对象,并在模板里方便的取出来显示呢?

    解决这一点的一个诀窍在于使用字典和List容器的交叉嵌套。


   首先从最小的元素开始包装,首先是日期,用date对象表示。然后有是否周末的信息,可以用字符串对象来表示,即 isweekend="周末"or isweekend=""。然后是每一个员工在某天的信息,可以用一个字典表示,例如 person={'name':"小红",'state':"来了"}.


    然后,可以把每一行的信息看成一个对象,发现这个对象里包含了日期、工作日、多个员工的考勤信息。在这里,多个员工信息可以用list来包装:list_person=[person,person,person.....]。然后由于组成一行的数据种类是不同的,因此再用一个字典来包装每一行的数据:dic_row={'date':date,'isweekend':isweekend,'list_person':list_person}。这样每一行的数据就表示出来了。


    之后,由于整张表由多个类似的行构成,所以最后用一个list来包装所有的行字典:list_table=[dic_row,dic_row.......]。


    现在,整个表的数据就被包裹在一个对象list_table之中了,把这个对象加入Context之中,传到模板文件去,渲染生成表格。比如:c=Context({'table':list_table})

   t=get_template("template.html")

   html=t.render(c)


   现在的list_table相当于这样的结构:[dic_row,{'date':2010-1-2,'isweekend':"周末",'list_person':[person,{"name":"小红","state":"来了"}....]}....]。


   最后,在模板里,通过类似于{% for row in list_table %} 这样的循环语句,就可以把整张表显示出来了。


   可以看出,用list+字典的方式,再复杂的数据也可以表示出来。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值