2013-06-20 11 views
8

Domanda newbie.File immagine jinja per flacone Python non trovato

Sto usando Flask, un Webframe per Python. Flask usa Jinja per rendere il modello. Non so quale versione di Jinja Flask usi, né so come recuperare la versione di Jinja o la versione di Flask. Io uso Python versione 2.7.

Il modello contiene un'immagine nella directory css/image. Questa immagine è visibile quando si visualizza il modello come file direttamente nel browser Firefox.

Ma non quando si esegue Flask:

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

@app.route('/hello/') 
@app.route('/hello/<name>') 
def hello(name=None): 
    return render_template('Basic.html', name=name) 

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

Il contenuto del file HTML:

<!DOCTYPE HTML> 
<html> 
    <body> 

     <!-- variable example begin --> 
     {% if name %} 
     <h1>Hello {{ name }}!</h1> 
     {% else %} 
     <h1>Hello World!</h1> 
     {% endif %} 

     <!-- variable example end --> 

    <img src="css/images/icons/resultset_previous.png" width="16" height="16" alt="previous" title="Previous" border="0"> 

    </body> 
</html> 

La multa modello di esecuzione e l'esempio variabile viene eseguito come previsto. Ma le immagini non vengono visualizzate. Debug ritorna: "GET /hello/css/images/icons/resultset_previous.png HTTP/1.1" 404 -

corro Flask in virtualenv come suggerito nella documentazione. Il percorso dell'immagine sembra essere sconosciuto. Come posso impostare il percorso?

+0

Forse si imposta i percorsi come raccomandato dal tutorial? – debianplebian

+0

se stai usando un virtualenv, puoi vedere quale versione di jinja e flask stai usando facendo 'pip freeze' dalla riga di comando. – richsilv

risposta

7

Vedere this section della documentazione del pallone.

Il modo corretto per fare riferimento al file statico dal modello è:

<img src="{{ url_for('static', filename = 'css/images/icons/resultset_previous.png') }}" width="16" height="16" alt="previous" title="Previous" border="0"> 
+0

questo è un risparmiatore di vita, grazie mille –

18

Per Flask, si dovrebbe tenere i file statici di solito in una cartella "statico" e quindi utilizzare la funzione di url_for. Diciamo che il progetto si chiama "myproject" e con il tuo esempio, si dovrebbe essere simile:

myproject/ 
    app.py 
    templates/ 
    static/ 
     css/ 
      images/ 
       icons/ 
        resultset_previous.png 

Poi nel modello, è possibile chiamare

<img src= {{ url_for('static', filename = 'css/images/icons/resultset_previous.png') }} width="16" height="16" alt="previous" title="Previous" border="0"> 

Inoltre, per rispondere alla tua domanda su Jinja versioni ecc, check this out

https://github.com/mitsuhiko/flask/blob/master/.travis-lowest-requirements.txt

+1

Grazie mille. Questo fa il kob – Bernard

+0

Se funziona, si prega di accettare la risposta per gli altri a vedere. – codegeek

+0

Grazie mille. Questo ha aiutato! –