2013-04-08 1 views
10

Sto provando a servire un file statico usando il pallone. Non so come usare la funzione url_for. Tutti i miei percorsi che generano contenuti dinamici stanno lavorando bene, ho importato url_for, ma quando ho questo codice:python flask - serving static files

@app.route('/') 
def home(): 
    return url_for('static', filename='hi.html') 

Insieme con il mio file 'hi.html' (che ha un po 'di HTML di base in esso) in seduta directory statica, che cosa ottengo quando carico la pagina è letteralmente questo:

/static/hi.html

sto solo usando url_for in modo errato?

risposta

16

url_for restituisce, precisamente, l'URL per quel file. Sembra che tu voglia redirect all'URL per quel file. Invece, stai solo inviando il testo dell'URL al client come risposta.

from flask import url_for, redirect 

@app.route('/') 
def home(): 
    return redirect(url_for('static', filename='hi.html')) 
+0

Naturalmente. Sono un idiota. Tu sei furba. Grazie. – user1276273

+11

Nessun idiota qui, solo persone che non sanno ancora. anche il consiglio di sberry su come servire file statici è appropriato. –

6

Si sta ottenendo l'output corretto per quello che si sta facendo. url_for genera l'URL per gli argomenti che gli vengono assegnati. Nel tuo caso, stai generando l'url per il file hi.html nella directory static. Se si vuole realmente l'output del file, si vorrebbe

from flask import render_template, url_for 

... 

    return render_template(url_for("static", filename="hi.html")) 

Ma a questo punto, la directory statica avrebbe bisogno di essere sotto la directory dei modelli (dove mai che è configurato per vivere).

Se si stanno servendo file html statici come questo, il mio suggerimento sarebbe di servirli al di fuori dell'applicazione del pallone instradando il traffico a /static/.* direttamente dal proprio server web. Ci sono molti esempi sul web per farlo usando nginx o apache.

+0

Grazie - Ho tutte le intenzioni di servirli direttamente dal mio server web, proprio mentre sto sviluppando voglio essere in grado di servirli usando la fiaschetta, e più di ogni altra cosa mi stava facendo impazzire. – user1276273