我没有做很多网页开发,所以我在这个领域的知识非常基础。但是,我必须使用 python flask 编写一个简单的Web应用程序。
在这个应用程序中,我有一个简单的类,如下所示:
class Task(object):
def __init__(self, id, title):
super(Task, self).__init__()
self.id = id
self.title = title
可以假设id
是integer
而title
是(unicode) string
。
在视图函数中,我想渲染一个传递list
Task objects
@app.route('/tasklist')
@login_required
def tasklist():
tasklist = [
Task(1, u"Task 1"),
Task(2, u"Task 2"),
Task(3, u"Task 3"),
Task(4, u"Task 4")
]
return render_template( "tasklist.html", tasklist=tasklist)
的模板,如下所示:
TypeError: <models.Task object at 0x103861210> is not JSON serializable
调用view函数时,我收到以下错误消息:
render_template
当我浏览互联网时,我看到很多示例,他们使用render_template
将对象列表传递给视图。所以我想知道我错过了什么?我的对象只使用基本数据类型。我是否必须重载特定功能?
使用简单字符串列表(而不是类实例)调用{{1}}可以正常工作。
我知道,这是一个非常基本的问题,但我现在找不到令人满意的答案。
答案 0 :(得分:2)
我对于烧瓶知之甚少,但它似乎需要JSON可序列化的对象,所以这就是我的想法。
通常,对象不是JSON可序列化的。您必须将其转换为JSON可序列化对象,例如字典:
class Task(object):
def __init__(self, id, title):
self.id = id
self.title = title
def as_dict(self):
return {
"id": self.id,
"title": self.title
}
然后
tasklist = [
Task(1, u"Task 1"),
Task(2, u"Task 2"),
Task(3, u"Task 3"),
Task(4, u"Task 4")
]
tasklist = [task.as_dict() for task in tasklist]
return render_template( "tasklist.html", tasklist=tasklist)