2016-12-20 16 views
0

Я изучаю Flask, и у меня возникают некоторые проблемы с передачей аргументов URL-адресу для использования на другой странице. Например, у меня есть форма на /index, и я бы хотел, чтобы она перенаправляла страницу /results, где я мог печатать данные формы. Моя попытка это:Flask - передать аргумент URL - 405 Ошибка

from flask import render_template 
from flask import redirect 
from flask import url_for 

from app import app 
from .forms import LoginForm 

@app.route('/') 
@app.route('/index', methods=['GET', 'POST']) 
def login(): 
    form = LoginForm() 
    if form.validate_on_submit(): 
     name = form.artistName.data 
     return redirect(url_for('result', name=name)) 
    else: 
     return redirect('/index') 
    return render_template('index.html', 
          title='Sign In', 
          form=form) 

@app.route('/result/<name>') 
def result(name): 
    return render_template('results.html') 

я получаю 405 ошибку Method not allowed for the requested URL при перенаправлении на /results странице. Я хотел бы построить URL-адрес на /results, используя результат формы в качестве аргумента.

Как это сделать? Большое спасибо

+1

Вы можете добавить StackTrace ошибки, которые вы столкнулись? –

+0

Просим сообщить сообщение об ошибке. –

+0

Я получаю ошибку 405 'Метод не разрешен для запрошенного URL 'при перенаправлении на страницу'/results'. – ggordon

ответ

0

вы определили

@app.route('/result/<name>') 

, который означает, что его метод HTTP по умолчанию является GET; , когда это работает:

if form.validate_on_submit(): 
    # POST method 
    name = form.artistName.data 
    # redirect Will use 'POST' 
    return redirect(url_for('result', name=name)) 

так, вы получили Method not allowed for the requested URL.

я думаю, вы можете добавить POST метод к @app.route('/result/<name>')

+0

Добавление метода 'POST' к' @ app.route ('/ result/') 'приводит к циклу перенаправления, я не уверен, почему. – ggordon

+0

Да, он перенаправляет логин. Фактически, только метод Get позволяет перенаправлять напрямую. Я думаю, это может помочь: @ app.route ('/ result/', methods = ['GET', 'POST']) – bingtel

 Смежные вопросы

  • Нет связанных вопросов^_^