Отправка формы WTForms обновляет только страницу вместо перенаправления - PullRequest
0 голосов
/ 01 июня 2019

Я собрал страницу с формой автозаполнения, и когда я пытаюсь отправить информацию, страница просто обновляется, не идя по правильному маршруту. Итак, если кто-то вводит «Ab» в форму, форма правильно предлагает «Abc». Если они выбирают «Abc», а затем нажимают «Отправить», я пытаюсь перенаправить на /foo/Abc.

.

Настой:

from flask import Flask, jsonify, Response, render_template, request, redirect
import json
from flask_wtf import Form
from wtforms import TextField, BooleanField, PasswordField, TextAreaField, SubmitField, validators
from engine import *

app = Flask(__name__)
app.static_folder = 'static'

foo_list = ['Abc', 'Bcd', 'Cde', 'Def']

@app.route("/", methods=['GET', 'POST'])
def index():
    form = SearchForm(request.form)
    if form.validate_on_submit():
        form_data = form.autocomp.data
        return redirect(url_for('/foo/', form_data))
    return render_template('index.html', form=form)

@app.route("/foo/<title>")
def randomFunction(title):
    #code that it runs
return render_template('foo.html')

class SearchForm(Form):
    autocomp = TextField('Enter Search Term', id='foo_autocomplete')
    submit = SubmitField('Search')

@app.route('/_autocomplete', methods=['GET'])
def autocomplete():
    return Response(json.dumps(foo_list), mimetype='application/json')

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

HTML:

<form method="POST" novalidate>
{{ form.autocomp.label }}: {{ form.autocomp }} {{ form.submit() }}
</form>

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

EDIT:

Разобрался. Изменен индексный код маршрута на:

def index():
    form = SearchForm(request.form)
    if request.method == 'POST':
        title = form.autocomp.data.replace(" ", "%20")
        return redirect('http://127.0.0.1:5000/rec/' + title)
...