+ -
当前位置:首页 → 问答吧 → Django Template中使用含有类实例对象的字典时要注意的事项[初学者问题]

Django Template中使用含有类实例对象的字典时要注意的事项[初学者问题]

时间:2011-10-13

来源:互联网

下面小弟来说下今天学Django模板时遇到的问题和解决的方法
在python idle里,我写入如下代码Python code
class Test:
    id = 0
    name =''
    passwd = ''
    def __init__(self, id, name, passwd):
        self.id = id
        self.name = name
        self.passwd = passwd

这是一个测试类的定义,很简单的一个类
然后我实例化了两次Python code
test1 = Test(0, 'kevin', '123')
test2 = Test(1, 'cong', '234')


现在要测试的类和对象有了,我开始加入模板内容如下Python code

t = Template('this is a Test, test that {{id}}')
c = Context({"id":test1.id,})
print t.render(c)


上面这个测试模板返回的内容如下Python code
this is a Test, test that 0

之后我想测试下如果直接传进去对象的成员变量,代码如下Python code

t = Template('this is a Test, test that {{id.id}}')
c = Context({"id":test1,})
print t.render(c)


上面的这个测试模板也返回
Python code
this is a Test, test that 0

上面的测试简单顺利,麻痹了我的神经,我就把类对象通过字典传到模板,现在开始要看到真正的问题了,测试的模板文件内容如下HTML code

<html>
<head>
<title>
</title>
</head>
<body>
<table >
    <tr>
        <td>
            {%for i in RecordInfo%}
            {{i.id}}<br>------------------------
            {%endfor%}
        </td>
    </tr>
</table>
</body>
</html>


不知道大家一眼看出来我犯的错误没有?
就是字典的成员函数in在调用时默认返回的是keys()的列表
这个Python code
{{i.id}}
是无效的
要用values返回的列表才是真正的类实例
修改关键代码如下Python code

            {%for i in RecordInfo.values%}
            {{i.id}}<br>------------------------
            {%endfor%}


这样在源文件中传到模板里的类实例就可以被正常访问了
此错误比较低级,发此贴给大家提个醒
以后编码时要认真

作者: kevin_zcwen   发布时间: 2011-10-13

另外补充一点,在settings.py中配置Database_Engine时注释里写的是ADD Not Replace

作者: kevin_zcwen   发布时间: 2011-10-14

这个django或者template没有任何关系。Python里的for k in {...}本来就是key。

作者: iambic   发布时间: 2011-10-14

引用 2 楼 iambic 的回复:

这个django或者template没有任何关系。Python里的for k in {...}本来就是key。

首先你说的是对的,我原来看字典的时候没看那么细,没有意思到这点
当时只关注用key来调用value了
其次是提醒 大家不要犯错
感谢你的回答

作者: kevin_zcwen   发布时间: 2011-10-14

再有就是当时做的例子是调用for i in dic.keys()
所以就没想到for i in dic中i也是key
看书还是少呀,不够

作者: kevin_zcwen   发布时间: 2011-10-14