2014-05-24 19 views
5

La mia struttura del progetto è come qui di seguitoFlask in grado di trovare i modelli

run.py 
lib/ 
mysite/ 
    conf/ 
     __init__.py (flask app) 
     settings.py 
    pages/ 
     templates/ 
      index.html 
     views.py 
     __init__.py 

Questo è mysite.conf.__init__

from flask import Flask 

app = Flask(__name__) 
app.debug = True 

La mia idea è quella di ora importare app ad ogni altro modulo di usarlo per creare viste. Qui in questo caso c'è un modulo pages.

In pages.views ho qualche codice come

from flask import render_template 
from mysite.conf import app 

@app.route('/') 
def index(): 
    return render_template('index.html') 

Il index.html è collocato in pages/templates

Quando eseguo questo app da run.py che è come sotto

from mysite.conf import app 
app.run() 

mi sto modello non trovato errore. Come ripararlo? e perché sta succedendo questo!

Sono fondamentalmente un ragazzo di Django, e si trova di fronte a un sacco di disagi con l'importazione dell'oggetto wsgi ogni volta per creare una vista in ogni modulo! Sembra un po 'pazzo, il che in un certo senso incoraggia le importazioni circolari. C'è un modo per evitarlo?

+0

Prova 'render_template ('templates/index.html')' – ajkumar25

risposta

10

Flask si aspetta che la directory templates si trovi nella stessa cartella del modulo in cui è stata creata; sta cercando mysite/conf/templates, nonmysite/pages/templates.

Avrai bisogno di dire a Flask a guardare altrove, invece:

app = Flask(__name__, template_folder='../pages/templates') 

Questo funziona come il percorso viene risolto relativo al percorso modulo corrente.

Non è possibile avere directory di modelli per modulo, non senza utilizzare blueprints. Un modello comune consiste nell'utilizzare sottodirectory della cartella templates per suddividere i modelli. Dovresti utilizzare templates/pages/index.html, caricato con render_template('pages/index.html'), ecc.

L'alternativa è utilizzare un'istanza Blueprint per sottomodulo; è possibile assegnare a ciascun modello una cartella modello separata, utilizzata per tutte le viste registrate per tale istanza di progetto. Si noti che tutte le rotte di un progetto devono iniziare con un prefisso comune unico a quel modello (che può essere vuoto).

+0

Ho alcuni altri moduli come 'person'. dove voglio esaminare la directory 'person/templates'. come fare automaticamente questo .. – Iamcool

+0

@Iamcool: utilizzare Blueprints per modulo (che può avere la propria cartella modello indipendente configurata), o non farlo. Normalmente useresti le sottocartelle di 'templates /', come 'templates/person', quindi carica' render_template ('person/template.html') '. –

+0

Mi è capitato di esaminare i progetti. Beh, dice che non sono app collegabili. Se ci confrontiamo con le app di Django .. quanto sono diverse? – Iamcool

Problemi correlati