2012-09-16 22 views
5

Sto costruendo un'applicazione modulare in Flask e continuo a ricevere un errore di compilazione se mi riferisco a una funzione in un altro Blueprint dal mio progetto corrente ad es. Ho un file userProfiles.pyFlask url_for fornisce un errore durante il routing nell'applicazione modulare

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

An in un altro file userAccounts.py devo

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

e poi ho un main.py che registra tutti i progetti e non app.run()

ora sto provando a fare url_for ('userA.login) dalla mia funzione showProfile ma continuo a ricevere un - werkzeug.routing.BuildError -. Non sono stato in grado di risolvere questo e nessuna delle soluzioni online mi ha aiutato.

P.S. Anche la funzione url_for non funziona nei miei modelli, per qualche ragione semplicemente non capta le funzioni, non ho avuto altra scelta che href al percorso.

solo per aggiungere un po 'po' più informazioni io non hav funzioni duplicate a tutti, tutte le funzioni ed i loro nomi sono unici e l'instradamento url_for funziona bene all'interno di ciascun Blueprint

Ecco l'Traceback:

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

Messaggio l'intero backtrace. – Blender

+1

Mostrare anche il codice in cui entrambi i progetti sono registrati nell'app. –

risposta

7

Come hai dichiarato il tuo progetto userA?

Quando si utilizza url_for() con i modelli, il prefisso della stringa di endpoint (come identificatore progetto) deve essere nome del progetto, come avete passato per primo argomento, non il nome variabile che il progetto ha assegnato.

subapp = Blueprint('profile', __name__) 

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

Se hai dichiarato progetto come sopra, si dovrebbe chiamare url_for() come di seguito:

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