使用表单在 Flask 中执行 'advanced search' 的正确方法?
Correct way to use forms to do an 'advanced search' with Flask?
我正在尝试设置一些高级搜索,允许按 代码、国家/地区、 和 标题 搜索产品。在我的 views.py
里面我有:
@app.route('/advanced_search_results/<code>/<country>/<title>', methods=['GET', 'POST'])
def advanced_search_results(code, country, title):
products = models.Product.query.filter_by(code=code, country=country, title=title).all()
return render_template('advanced_search_results.html', products=products)
@app.route('/advanced_search', methods=['GET', 'POST'])
def advanced_search():
form = AdvancedSearchForm()
if form.validate_on_submit():
code = form.code.data
country = form.country.data
title = form.title.data
return redirect(url_for('advanced_search_results', code=code, country=country, title=title))
return render_template('advanced_search.html', title='Advanced Search', form=form)
这里有一些明显的问题,但我最担心的是高级搜索将以 url 结束,例如 www.mysite.com/advanced_search_results/the_code/the_country/the_title,并且这个字符串只会随着搜索变得更高级而变得更长。我是在朝着正确的方向前进,还是错过了更好的处理方式?
您可以使用查询字符串 - 即您的 URL 看起来像:
mysite.com/advanced_search_results?country=USA&code=42&title=aTitle
from flask import request
@app.route('/advanced_search_results')
def adv_search_results():
country = request.args.get('country')
code = request.args.get('code')
title = request.args.get('title')
products = models.Product.query.filter_by(code=code, country=country, title=title).all()
return render_template('advanced_search_results.html', products=products)
另请注意 unknown variables in url_for() will be appended as query parameters.
我正在尝试设置一些高级搜索,允许按 代码、国家/地区、 和 标题 搜索产品。在我的 views.py
里面我有:
@app.route('/advanced_search_results/<code>/<country>/<title>', methods=['GET', 'POST'])
def advanced_search_results(code, country, title):
products = models.Product.query.filter_by(code=code, country=country, title=title).all()
return render_template('advanced_search_results.html', products=products)
@app.route('/advanced_search', methods=['GET', 'POST'])
def advanced_search():
form = AdvancedSearchForm()
if form.validate_on_submit():
code = form.code.data
country = form.country.data
title = form.title.data
return redirect(url_for('advanced_search_results', code=code, country=country, title=title))
return render_template('advanced_search.html', title='Advanced Search', form=form)
这里有一些明显的问题,但我最担心的是高级搜索将以 url 结束,例如 www.mysite.com/advanced_search_results/the_code/the_country/the_title,并且这个字符串只会随着搜索变得更高级而变得更长。我是在朝着正确的方向前进,还是错过了更好的处理方式?
您可以使用查询字符串 - 即您的 URL 看起来像:
mysite.com/advanced_search_results?country=USA&code=42&title=aTitle
from flask import request
@app.route('/advanced_search_results')
def adv_search_results():
country = request.args.get('country')
code = request.args.get('code')
title = request.args.get('title')
products = models.Product.query.filter_by(code=code, country=country, title=title).all()
return render_template('advanced_search_results.html', products=products)
另请注意 unknown variables in url_for() will be appended as query parameters.