假设现在从数据库里取出了一张关于人员考勤记录的二维表,人员数量是可变的,日期跨度也是可变的,每一天的信息含有每个员工是否有来上班,该天是否是周末等信息,那么要如何把这样的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 %} 这样的循环语句,就可以把整张表显示出来了。