2015-01-29 20 views
12

Sto configurando un server locale usando il pallone. Tutto quello che voglio fare attualmente è visualizzare un'immagine usando il tag img nella pagina index.html. Ma continuo a ricevere erroreDove si trova il pallone per i file di immagine?

GET http://localhost:5000/ 
ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg 404 (NOT FOUND) 

dove viene pallone cercare i file? Un piccolo aiuto sarebbe fantastico. Il mio codice HTML è

<html> 
    <head> 

    </head> 
    <body> 
    <h1>Hi Lionel Messi</h1> 

    <img src= "ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg "> 

    </body> 

</html> 

Il mio codice Python è:

@app.route('/index', methods=['GET', 'POST']) 
def lionel(): 
    return app.send_static_file('index.html') 
+1

Leggere la [documentazione] (http://flask.pocoo.org/docs/0.10/quickstart/#static-files) –

risposta

17

è il file immagine ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg nella directory static? Se lo sposti nella tua directory statica e aggiorni il tuo HTML come tale:

<img src="/static/ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg"> 

Dovrebbe funzionare.

Inoltre, vale la pena notare, c'è un modo migliore per strutturarlo.

Struttura del file:

app.py 
static 
    |----ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg 
templates 
    |----index.html 

app.py

from flask import Flask, render_template, url_for 
app = Flask(__name__) 

@app.route('/index', methods=['GET', 'POST']) 
def lionel(): 
    return render_template('index.html') 

if __name__ == '__main__': 
    app.run() 

templates/index.html

<html> 
    <head> 

    </head> 
    <body> 
    <h1>Hi Lionel Messi</h1> 

    <img src="{{url_for('static', filename='ayrton_senna_movie_wallpaper_by_bashgfx-d4cm6x6.jpg')}}" /> 

    </body> 

</html> 

Facendo in questo modo assicura che non si è hard-codifica un URL percorso per le tue risorse statiche.

5

Dal documentation:

applicazioni web dinamiche anche bisogno di file statici. Di solito è da dove viene i file CSS e JavaScript. Idealmente il tuo server web è configurato per servirli per te, ma durante lo sviluppo Flask può fare anche . È sufficiente creare una cartella denominata static nella confezione o accanto al modulo e sarà disponibile allo /static nell'applicazione .

Per generare gli URL per i file statici, utilizzare lo speciale nome 'static' endpoint :

url_for('static', filename='style.css') 

Il file deve essere memorizzato nel file system come static/style.css.

3

Utilizzare il percorso assoluto in cui esiste effettivamente l'immagine (ad esempio '/ home/artitra/pictures/filename.jpg'

o creare la cartella statico all'interno della vostra directory di progetto come questo

| templates 
    - static/ 
     - images/ 
       - yourimagename.jpg 

poi fanno

app = Flask(__name__, static_url_path='/static') 

allora si può accedere la vostra immagine come questo in index.html

src ="/static/images/yourimage.jpg" 

in img tag

1

Mi ci è voluto un po 'per capire anche questo. url_for in Flask cerca gli endpoint specificati nello script routes.py.

Quindi se si dispone di un decoratore nel file come @blah.route('/folder.subfolder'), Flask riconoscerà il comando {{ url_for('folder.subfolder') , filename = "some_image.jpg" }}. L'argomento 'folder.subfolder' lo invia a un endpoint Flask che riconosce.

Tuttavia diciamo che è stato memorizzato il file di immagine, some_image.jpg, nella vostra sottocartella, ma non ha specificato questa sottocartella come endpoint percorso nel pallone routes.py, il vostro decoratore percorso assomiglia @blah.routes('/folder'). Quindi devi chiedere il tuo file immagine in questo modo: {{ url_for('folder'), filename = 'subfolder/some_image.jpg' }}

I.E. dite a Flask di andare all'endpoint che conosce, "folder", quindi dirigerlo da lì mettendo il percorso della sottodirectory nell'argomento filename.