【问题标题】:twitter style scroll load for a flask stream_with_context page用于烧瓶 stream_with_context 页面的 twitter 样式滚动加载
【发布时间】:2014-06-19 18:28:21
【问题描述】:

我有一个搜索页面,它将搜索静态文件并获取一些信息以放在首页上。以下是我如何管理创建搜索的算法。

@search.route('/')
def properties_search():
    if len(request.args) > 0:
        d = CSVReader()
        row_count = len(list(search_csv(d, request.args)))
        gen = stream_with_context(search_csv(d, request.args))
        return Response(
            stream_with_context(
                stream_template(
                    'advanced_search/results.html',
                    rows=gen
                )
            )
        )
    return render_template('advanced_search/advanced.html')

def search_csv(rows, form):
    for row in rows:
        if satisfies_all_requirements(row, form):
            yield row

但是,当它到达页面时,它将继续渲染每个结果而不会停止。

<div class="results">
  {% for each in rows %}
    {# blah blah some html goes here, you get the point #}
  {% endfor %}
</div>

如何在此模板上启用无限滚动,使其不会在第一次点击时呈现每个结果?

【问题讨论】:

  • 这是很久以前的事了,但从长远来看,我最终做的是对可以发送的数据量设置一个限制,并使用 pg-query-stream 来将其写入将在客户端上使用 javascript 响应的套接字

标签: javascript jquery python flask


【解决方案1】:

这是与流式传输响应不同的概念。相反,创建一个将返回另一块数据(可能是 JSON 格式)的路由,并在页面滚动到底部时在客户端使用 JavaScript 调用此路由并适当地插入数据。

@app.route('/')
def index():
    # this page just loads the start page containing the javascript that will load more results
    # you could pre-load the first set of data so the page renders something at first
    data = get_some_data()
    return render_template('index.html', data=data)

@app.route('/more')
def more():
    # this route will only be called from JavaScript when the page is scrolled

    # read query parameters to know what data to get
    page = request.args.get('page', 1)
    per_page = request.args.get('per_page', 20)

    # get the requested set of data
    data = get_some_data(page, per_page)

    # return it as json
    return jsonify(data=format_data_appropriate_for_jsonify(data))

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2016-01-31
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多