【问题标题】:Correct way to use forms to do an 'advanced search' with Flask?使用表单使用 Flask 进行“高级搜索”的正确方法?
【发布时间】:2015-01-13 17:30:38
【问题描述】:

我正在尝试设置一个小高级搜索,允许按代码、国家/地区标题搜索产品。在我的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)

这里有一些明显的问题,但我最担心的是高级搜索最终会出现在 www.mysite.com/advanced_search_results/the_code/the_country/the_title 之类的 url,而这个随着搜索变得更高级,字符串只会变得更长。我是朝着正确的方向前进还是错过了更好的处理方式?

【问题讨论】:

    标签: python forms flask wtforms flask-wtforms


    【解决方案1】:

    您可以使用查询字符串 - 即您的 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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多