python - 如何将对象实例传递给 jinja html 模板

标签 python jinja2

我的类(class)是这样的

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

最佳答案

template.render 需要知道如何调用变量。因此,它接受 "varname": "value" 的字典,或关键字参数,例如 render(x=f.x, y=f.y)。这正是您的 **attr.asdict(f) 表达式的计算结果;但如果您不包含 **,它也同样有效。

要解决您的问题,只需使用关键字参数:template.render(f=f)。这还允许您重命名变量:如果您想在模板中使用 foo.x,请调用 template.render(foo=f)

关于python - 如何将对象实例传递给 jinja html 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51735093/

相关文章:

python - 全局名称 'sqrt' 未定义

javascript - 为什么用于 html 的 simplejson 编码器使用\\u0026 转义而不是 & 让 XSS 发生?

python - 如何在 Python 中像 ERB 一样进行模板化?

jinja2 - jinja 模板中的破折号意味着什么?

python - 查询 Pelican 主题中的特定文章(通过标签/类别)

python - 有效计算两个数据集之间的成对半正弦距离 - NumPy/Python

python - 无法抓取所有评论

python - 如何处理 PythonCard 中的 mouseMiddleDrag 事件?

templates - 如何从 Jinja 2 模板获取当前变量列表?

html - 将HTML标记嵌入Flask WTForms字段中