2

私は Web 開発をあまり行っていないので、この分野に関する私の知識はかなり基本的なものです。ただし、 pythonフラスコを使用して単純な Web アプリケーションを作成する必要があります。

このアプリケーションには、次のような単純なクラスがあります。

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

は でありid、 であるintegerと想定できます。title(unicode) string

ビュー関数では、次のようにlistofを渡すテンプレートをレンダリングします。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 に答える