2015-07-21 16 views
6

Mam formularz ankiety. Po przesłaniu formularza chciałbym poradzić sobie z zapisaniem danych, a następnie przekierowaniem do widoku "sukcesu". Korzystam teraz z następującego kodu, ale pozostaje on tylko na bieżącym adresie URL, a chciałbym przejść na numer /success. Jak mogę to zrobić?Przekierowanie do innego widoku po przesłaniu formularza

@app.route('/surveytest', methods=['GET', 'POST']) 
def surveytest(): 
    if request.method == 'GET': 
     return render_template('test.html', title='Survey Test', year=datetime.now().year, message='This is the survey page.') 
    elif request.method == 'POST': 
     name = request.form['name'] 
     address = request.form['address'] 
     phone = request.form['phone'] 
     email = request.form['email'] 
     company = request.form['company'] 
     return render_template('success.html', name=name, address=address, phone = phone, email = email, company = company) 

Odpowiedz

5

Masz właściwy cel: dobrze jest przekierować po obsłudze danych formularza. Zamiast ponownie zwracać numer render_template, należy zamiast tego użyć redirect.

from flask import redirect, url_for, survey_id 

@app.route('/success/<int:result_id>') 
def success(result_id): 
    # replace this with a query from whatever database you're using 
    result = get_result_from_database(result_id) 
    # access the result in the tempalte, for example {{ result.name }} 
    return render_template('success.html', result=result) 

@app.route('/survey') 
def survey(): 
    if request.method == 'POST': 
     # replace this with an insert into whatever database you're using 
     result = store_result_in_database(request.args) 
     return redirect(url_for('success', result_id=result.id)) 

    # don't need to test request.method == 'GET' 
    return render_template('survey.html') 

Przekierowanie będą obsługiwane przez przeglądarkę użytkownika, a nowa strona na nowy adres URL zostanie załadowany, zamiast renderowania innego szablonu w tej samej zawartości.

+0

Można również użyć [wiadomości flash] (http://flask.pocoo.org/docs/0.10/patterns/flashing/). – dirn

Powiązane problemy