render_template无法jsonify对象

时间:2013-09-18 09:45:08

标签: python flask

我没有做很多网页开发,所以我在这个领域的知识非常基础。但是,我必须使用 python flask 编写一个简单的Web应用程序。

在这个应用程序中,我有一个简单的类,如下所示:

class Task(object):       
    def __init__(self, id, title):
       super(Task, self).__init__()
       self.id = id
       self.title = title

可以假设idintegertitle(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}}可以正常工作。

我知道,这是一个非常基本的问题,但我现在找不到令人满意的答案。

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)