0

Flask を使用して 2 つのビューを作成しようとしています。最初のビューshow_entriesには、テーブル内のエントリのリストが表示されます。また、新しいエントリを作成するためのフォームも含まれています。

フォームは、POST メソッドを受け入れる 2 番目のビューに送信され、new_entrySQLAlchemy を使用して新しいエントリをテーブルに追加します。new_entryにリダイレクトしshow_entriesます。

私の問題は、 form.errors が にルーティングされないshow_entriesため、ユーザーには表示されないことです。これを行う最善の方法がわからない、またはビューを分割した方法で正しい軌道に乗っているかどうかさえわかりません。

これが私が現在持っているものです:

def show_entries():
    entryForm = EntryForm()
    entries = g.user.entries
    return render_template('show_entries.html', 
                           entries=entries,
                           entryForm=entryForm)

def new_entry():
    form = EntryForm()
    if form.validate_on_submit():
        newEntry = Entry(g.user, form.time.data)
        db_session.add(newEntry)
        db_session.commit()
        flash('New entry was succesfully posted')
    return redirect(url_for('show_entries'))
4

1 に答える 1

1

通常のパターンは、/show_entries を一覧ページとして、new_entry をフォームとして持つことです。new_entry に対して GET リクエストを実行すると、フォームが取得され、フォームに POST してエントリが追加されます。そうすれば、エラーが発生した場合にフォームの横に表示するだけで、すべてのデータが利用可能になります。ビューを分割した場合、エラー データ (およびフォーム データ) を new_entry ビューから show_entries ビューに移動する何らかの方法が必要になります。

(テストされていない)のようなもの:

def show_entries():
    entries = g.user.entries
    return render_template('show_entries.html', 
                           entries=entries)

def new_entry():
    form = EntryForm()
    if form.validate_on_submit():
        newEntry = Entry(g.user, form.time.data)
        db_session.add(newEntry)
        db_session.commit()
        flash('New entry was successfully posted')
        return redirect(url_for('show_entries'))
    return render_template('show_new_entry_form.html', 
                           entryForm=form)
于 2013-09-17T08:30:36.140 に答える