6

私の 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>
4

2 に答える 2

7

urlパラメータを使用して、並べ替えに関する情報を渡すことができます。ユーザーが名前による並べ替えを選択したとします。次に、これをURLの最後に追加します

    your_url?sort=name

次に、次のようにアクセスできます

    value = request.args.get('name','')

次のURLに並べ替え値を追加するテンプレートに並べ替え変数値を渡すだけです。

編集:

FlaskでそのようなURLを作成するには、次のようにします。

    url_for('url_view_name', sort='name')

これにより、クエリ引数として並べ替えが追加されたURLが返されます。URL構築の詳細については、こちらのフラスコのドキュメントを確認してください

于 2012-09-01T08:38:38.500 に答える
0

これはJavascriptで行うことができます。actionページ番号はURLの一部であるため、現在のページではなく目的のページ番号のURLに送信するようにページを変更するフォームのJavaScriptを変更することができます。

明確にするために、ユーザーが「次の」リンク/ボタンまたはページ番号をクリックすると、Javascriptを使用してhtmlフォームのアクションを変更し、現在のページではなく目的のページにフォームを投稿します。

于 2012-08-30T18:17:33.230 に答える