【问题标题】:When using flask, what is the best way to remembering parameters while paginating?使用烧瓶时,在分页时记住参数的最佳方法是什么?
【发布时间】:2016-07-17 01:09:19
【问题描述】:

假设我有一个包含多个过滤器的结果页面。过滤器作为 URL 参数传递给烧瓶。但是一旦我按下下一页,这将被遗忘。在页面之间保持这些参数的最佳方式是什么?

我确信存在 javascript 框架可以做到这一点,但我宁愿不使用 javascript 框架。

【问题讨论】:

    标签: javascript python flask query-string


    【解决方案1】:

    假设您正在渲染 HTML 而不是 JSON(看起来您来自标签),为什么不将请求中的过滤器查询参数添加到渲染页面中?

    例如,像这样的:

    Python:

    @app.route('/search')
    def search():
        page_no = request.args.get('page_no')
        color = request.args.get('color')
        brand = request.args.get('brand')
        # TODO: Generate your results here..
        return render_template('results.html', results=results, page_no=page_no, brand=brand color=color)
    

    模板:

    <a href="{{ url_for('search', page_no=str(page_no - 1), brand=brand, color=color) }}">Prev</a>
    <a href="{{ url_for('search', page_no=str(page_no + 1), brand=brand, color=color) }}">Next</a>
    

    这是一个最小的例子。您还需要处理特殊情况,例如不在第一页上呈现“上一个”链接。可能还对输入参数进行了一些验证。但它演示了如何维护链接 URL 中的过滤器参数。

    根据您有多少过滤器参数,您还可以考虑将其干燥,如下所示:

    Python:

    FILTER_PARAM_NAMES = ['keyword', 'date', 'foo', 'bar']
    # ...
    def search():
        filter_params = {f: request.args.get(f) for f in FILTER_PARAM_NAMES}
        # ...
        return render_template('results.html', results=results, **filter_params)
    

    模板:

    url_for('search', page_no=page_no, **filter_params)
    

    【讨论】:

    • 那么,假设我们选择了“filter_str”,那么这个字符串是如何由 HTML 生成的呢?例如,如果我有一个下拉菜单来选择过滤器颜色,则可能会得到一个“color=blue”GET 参数。但我想使用“filter_str=color:blue,brand:nike”,HTML 将如何生成它?我想使用“render_template **filter_params”替代方案不会有问题。
    • 是的,使用多个参数可能比将它们塞进单个 filter_str 参数更好。我将使用您的参数名称更新示例。
    • 好的,那么在这种情况下如何生成代码url_for color=yellow等?如果您没有先验过滤器的数量(因为大多数时候某些过滤器不会被使用),那么您如何处理呢?
    • 如果您的参数是由 HTML 表单生成的,但您不知道用户将提供多少个过滤器,则未使用的参数可能是空字符串。在这种情况下,只需忽略生成结果的代码中的空参数。试试看..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多