私の Flask アプリケーションには、Flask-SQLAlchemy ページネーション メソッドを使用してアイテムのテーブルをレンダリングするビューがあります。これまでのところ素晴らしいもの。しかし、並べ替えとフィルタリングを追加したいので、ユーザーが並べ替えとフィルターのオプションを選択できる選択ボックスを備えたフォームを作成しました。
ページで並べ替え/フィルターを送信すると、ビューは正常に機能します。最初のページが並べ替えられます。しかし、ページ上の別のページを選択すると、ページネーションは元のクエリに戻ります。新しいページの読み込み中にソート/フィルター オプションを保存するにはどうすればよいですか? 使い方flask.g
が思い浮かびましたが、正しい方法ですか?
class ItemTableForm(Form):
sort_choices = [('id', 'ID'),
('name', 'Name'),
('status', 'Status')]
filter_choices = [('all', 'All'),
('instock', 'In stock'),
('sold', 'Sold')]
sort = SelectField(u'Sort by', choices=sort_choices)
filter = SelectField(u'Filter by', choices=filter_choices)
@app.route('/browse/<int:page>', methods=("GET", "POST"))
def browse(page):
form = ItemTableForm()
if form.validate_on_submit():
query = Item.query.order_by(getattr(Item, form.sort.data))
else:
query = Item.query
pagination = paginate(query, page)
return render_template('browse.html', pagination=pagination, form=form)
# My template contains this form and a regular HTML table
<form action="{{ url_for('browse') }}" method="POST">
{{ form.hidden_tag() }}
{{ form.sort.label }} {{ form.sort() }}
{{ form.filter.label }} {{ form.filter() }}
<button type="submit" class="btn">Submit</button>
</form>