2012-10-15 12 views
6

data una struttura di esempio:Come posso includere/estendere un file jade dalla radice della mia directory modello in express?

/layout.jade 
/really/deep/dir/inside/my/template/folder/example.jade 

C'è un modo per estendere la layout.jade in example.jade senza dover tenere traccia del numero di directory padre?

Questo funziona come previsto tho:

extends ../../../..etc../../../layout 

Ma sarebbe preferibile fare qualcosa di simile:

extends /layout 

O anche alias/hardlink e usarlo come:

extends layout 

Anche supponendo che qualcuno conosca una soluzione, può anche essere applicata per includere?

+0

imbattuto in questo stesso problema. Finito con l'antipatico approccio "../../ .." ma sono sorpreso che questo non sia stato ancora trattato in modo più gradevole. –

+1

@JoshPinter vedi la mia risposta qui sotto –

risposta

1

C'è una modifica introdotta in this particular commit.

Fondamentalmente, se il primo carattere trovato nell'istruzione include è una barra e una base è definita, cercherà il modello in quel percorso.

è necessario innanzitutto impostare Jade:

app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 
app.locals.basedir = app.get('views'); 

Poi, da qualsiasi modello, non importa quanto profondamente nidificate, si può fare:

include /layout 
0

Dopo aver dato un'occhiata al codice stesso, mi sono reso conto che qualcuno non può semplicemente fare riferimento a un file di giada relativo alla radice dei modelli.

Tuttavia, un approccio semplice è quello di ricucire giada/lib/parser.js sostituzione di due istanze di:

, dir = dirname(this.filename); 

Con:

, dir = path.indexOf('/') ? dirname(this.filename) : this.options.settings.views; 

potrei pure avvertirvi che questo non è testato abbastanza e non è destinato all'uso in produzione.

Problemi correlati