Tim*_*imo 6 python pagination template-engine flask flask-sqlalchemy
在我的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>
Run Code Online (Sandbox Code Playgroud)
您可以使用url参数传递有关排序的信息.假设用户按名称选择排序.然后在url的末尾添加它
your_url?sort=name
Run Code Online (Sandbox Code Playgroud)
然后你可以访问它
value = request.args.get('name','')
Run Code Online (Sandbox Code Playgroud)
只需将排序变量值传递给您将排序值附加到下一个网址的模板.
编辑:
要在Flask中创建此类URL,请执行以下操作:
url_for('url_view_name', sort='name')
Run Code Online (Sandbox Code Playgroud)
这将返回带有作为查询参数附加的排序的url.退房烧瓶文档这里了解更多关于URL建设
你可以用 JavaScript 来做到这一点。由于页码是 URL 的一部分,因此您可以让 javascript 更改action更改页面的表单,以提交到具有所需页码而不是当前页面的 URL。
只是为了澄清,当用户单击“下一个”链接/按钮或页码时,使用 Javascript 更改 html 表单的操作,以便将表单发布到所需页面而不是当前页面。
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |