如何将对象实例传递给Jinja HTML模板

时间:2018-08-07 20:40:44

标签: jinja2

我的课看起来像这样

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

2 个答案:

答案 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))