2

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

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

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

可以假设idinteger并且title(unicode) string

在视图函数中,我想渲染一个传递 alist的模板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

当我在互联网上环顾四周时,我看到了许多示例,它们将对象列表传递给使用render_template. 所以我想知道我错过了什么?我的对象只使用基本数据类型。我是否必须重载特定功能?

render_template使用简单字符串列表(而不是类实例)调用可以正常工作。

我知道,这是一个非常基本的问题,但我目前还没有找到令人满意的答案。

4

1 回答 1

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)
于 2013-09-18T09:49:28.493 回答