我的课看起来像这样
class Foo():
x = attrib()
y = attrib()
f = Foo(x = 1,y = 2)
我的模板看起来像
<html>
<body>
<span>{{x}}</span> -> instead of this I want to use foo.x
<span>{{y}}</span> -> instead of this I want to use foo.y
</body>
</html>
我使用template.render(**attr.asdict(f))
进行渲染。
相反,我只想通过template.render(f)
并使用{{f.x}}
和{{f.y}}
有没有办法做到这一点? 我一直遇到错误
vars = dict(*args, **kwargs)
TypeError: 'Foo' object is not iterable
答案 0 :(得分:1)
template.render
需要知道如何调用变量。因此,它接受"varname": "value"
的字典或render(x=f.x, y=f.y)
之类的关键字参数。这正是您的**attr.asdict(f)
表达式求值的结果;但是如果您不包含**
,它也会同样有效。
要解决您的问题,只需使用关键字参数:template.render(f=f)
。这还允许您重命名变量:如果要在模板中使用foo.x
,请调用template.render(foo=f)
答案 1 :(得分:0)
此问题通过使用
解决 Template.render(dict(foo=f))