2010-09-10 14 views
52

Modifico el inicio de sesión de la aplicación de muestra flaskr, el error de obtención de la primera línea. Pero www.html está en el directorio de plantillas. errorError de matraz: werkzeug.routing.BuildError

return redirect(url_for('www')) 
#return redirect(url_for('show_entries')) 

pantalla:

werkzeug.routing.BuildError 

BuildError: ('www', {}, None) 

Gracias por la ayuda!

Respuesta

117

return redirect(url_for('www')) funcionaría si tiene una función en otro lugar como este:

@app.route('/welcome') 
def www(): 
    return render_template('www.html') 

url_for busca una función, se le pasa el nombre de la función que está deseando llamar. Piense en ello como esto:

@app.route('/login') 
def sign_in(): 
    for thing in login_routine: 
     do_stuff(thing) 
    return render_template('sign_in.html') 

@app.route('/new-member') 
def welcome_page(): 
    flash('welcome to our new members') 
    flash('no cussing, no biting, nothing stronger than gin before breakfast') 
    return redirect(url_for('sign_in')) # not 'login', not 'sign_in.html' 

También podría hacer return redirect('/some-url'), si eso es más fácil de recordar. También es posible que lo que desee, dada su primera línea, sea solo return render_template('www.html').

Y también, no del comentario de shuaiyuancn a continuación, si está utilizando planos, url_for debe invocarse como url_for(blueprint_name.func_name). See documentation here.

+0

veo, realmente te bvmou buenísimo gracias mucho. – chenge

+12

+1 para un ejemplo muy claro ... y para "nada más fuerte que la ginebra antes del desayuno" –

+0

¡Iluminador! Se pensó que el argumento es la URL ... – swdev

1

Suponiendo que def www(): ya está definido (como lo sugiere la impresionante respuesta de unmounted), este error también se puede arrojar si está utilizando un blueprint que no se ha registrado.

Asegúrese de registrar esto cuando app se instancia por primera vez. Para mí se ha hecho así:

from project.app.views.my_blueprint import my_blueprint 
app = Flask(__name__, template_folder='{}/templates'.format(app_path), static_folder='{}/static'.format(app_path)) 
app.register_blueprint(my_blueprint) 

Y dentro demy_blueprint.py:

from flask import render_template, Blueprint 
from flask_cors import CORS 

my_blueprint = Blueprint('my_blueprint', __name__, url_prefix='/my-page') 
CORS(my_blueprint) 


@metric_retriever.route('/') 
def index(): 
    return render_template('index.html', page_title='My Page!') 
Cuestiones relacionadas