2012-09-16 20 views
5

Estoy construyendo una aplicación modular en Flask, y sigo obteniendo un error de compilación si me refiero a una función en otro Blueprint de mi Blueprint actual, por ejemplo Tengo un archivo userProfiles.pyFlask url_for produce un error al enrutar en la aplicación modular

@userP.route('/myProfile/', methods=['GET']) 
def showProfile(): 
    ..... 

un en otro archivo userAccounts.py tengo

@userA.route('/login/', methods=['GET', 'POST']) 
def login(): 
    ..... 

y luego tengo una main.py que registra todos los planos y que app.run()

ahora estoy tratando de hacer url_for ('userA.login) desde mi función showProfile pero sigo obteniendo un - werkzeug.routing.BuildError -. No he podido resolver esto y ninguna de las soluciones en línea me ha ayudado.

P.S. La función url_for tampoco funciona en mis plantillas, por alguna razón simplemente no recoge las funciones, no tuve más remedio que buscar la ruta.

sólo para añadir un poquito más información yo no hav funciones duplicadas en absoluto, todas las funciones y sus nombres son únicos y el enrutamiento url_for funciona bien dentro de cada Blueprint

Aquí está el Rastreo:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1701, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1689, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1358, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1344, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/home/cevdet/PycharmProjects/FlaskProjects/jobperfect/userProfiles.py", line 126, in showProfile 
    else: return redirect(url_for('userA.login')) 
    File "/usr/local/lib/python2.7/dist-packages/flask/helpers.py", line 361, in url_for 
    return appctx.app.handle_url_build_error(error, endpoint, values) 
    File "/usr/local/lib/python2.7/dist-packages/flask/helpers.py", line 354, in url_for 
    force_external=external) 
    File "/usr/local/lib/python2.7/dist-packages/werkzeug/routing.py", line 1607, in build 
    raise BuildError(endpoint, values, method) 
BuildError: ('userA.login', {}, None) 
127.0.0.1 - - [17/Sep/2012 23:55:12] "GET /myP 
+1

Mensaje toda la traza. – Blender

+1

También muestre el código donde ambos planos están registrados en la aplicación. –

Respuesta

7

¿Cómo declaraste tu plano userA?

Al usar url_for() con planos, el prefijo de la cadena de punto final (como identificador de modelo) debe ser nombre del proyecto a medida que pasaba por ser el primer argumento, no nombre de la variable que el plan ha asignado.

subapp = Blueprint('profile', __name__) 

@subapp.route('/<username>') 
def fetch_profile(username): 
    pass 

Si usted declaró modelo como el anterior, debe llamar url_for(), como a continuación:

url_for('profile.fetch_profile', username=arg) 
Cuestiones relacionadas