【问题标题】:Flask + jquery autocompleteFlask + jquery 自动完成
【发布时间】:2014-04-22 09:26:56
【问题描述】:

关于flask和jquery自动完成的另一个问题。我一直在阅读并尝试以下已回答的问题,但没有成功:

Flask AJAX Autocomplete

Using jQuery autocomplete with Flask

特别是第二个答案完全符合我的情况。

但是由于某些原因(也许是我不明白应该做什么),回调 autocomplete(..) 仅在我加载页面时执行一次(并正确自动完成 NAMES 中的值),但在输入时从未执行文本框。

search.html

<head>
    <meta charset="utf-8">
    <link   rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.js"></script>
</head>

{{ form.autocomp.label }}: {{ form.autocomp }}

<script>
    $(function() {
        $.ajax({
            url: '{{ url_for("autocomplete") }}'
            }).done(function (data) {
                $('#autocomplete').autocomplete({
                    source: data,
                    minLength: 2
                });
            });
        });
</script>

application.py

from flask import Flask, Response, render_template, request
import json

app = Flask(__name__)

import wtforms as wt
from wtforms import TextField, Form

NAMES=["abc","abcd","abcde","abcdef"]

class SearchForm(Form):
    autocomp= TextField('autocomp',id='autocomplete')

@app.route('/autocomplete',methods=['GET'])
def autocomplete():
    search = request.args.get('term')

    app.logger.debug(search)
    return Response(json.dumps(NAMES), mimetype='application/json')

@app.route('/',methods=['GET','POST'])
def index():
    form = SearchForm(request.form)
    return render_template("search.html",form=form)

if __name__ == '__main__':
    app.run(debug=True)

【问题讨论】:

    标签: jquery autocomplete flask


    【解决方案1】:

    试试这个

    from flask import jsonify
    
    NAMES=["abc","abcd","abcde","abcdef"]
    
    @app.route('/autocomplete',methods=['GET'])
    def autocomplete():
        search = request.args.get('term')
    
        app.logger.debug(search)
        return jsonify(json_list=NAMES) 
    

    在 Jquery 中:

    <script>
    $(function() {
        $.ajax({
            url: '{{ url_for("autocomplete") }}'
            }).done(function (data) {
                $('#autocomplete').autocomplete({
                    source: data.json_list,
                    minLength: 2
                });
            });
        });
    </script>
    

    【讨论】:

    • 搜索字段总是None..如何将文本框中的值传递给python?
    • 嗨@kartheek,我正在尝试实现自动完成功能,但它对我不起作用。请你帮助我好吗。由于字数限制,我把我的代码放在了pastebin.com/fY2AXm3X的pastebin@
    • 这对我也不起作用(搜索总是无)。我试过this other solution,这在我的情况下有效。
    【解决方案2】:

    它不起作用,因为建议的代码段中打印错误:

    from flask import jsonify
    NAMES=["abc","abcd","abcde","abcdef"]
    @app.route('/autocomplete',methods=['GET'])
    def autocomplete():
        search = request.args.get('term')
    

    search = request.args.get('term') 'term' 更改为 'autocomplete'。所以正确的代码应该如下:

    from flask import jsonify
    NAMES=["abc","abcd","abcde","abcdef"]
    @app.route('/autocomplete',methods=['GET'])
    def autocomplete():
        search = request.args.get('autocomplete')
    

    【讨论】:

    • Pradeepb,它也适用于我。抱歉我的错误,因为我错过了 request.args.get('term') 参数。
    猜你喜欢
    • 2016-04-14
    • 2013-06-26
    • 2015-02-08
    • 2021-03-04
    • 2016-10-26
    • 2016-11-10
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多