2012-10-15 4 views
6

Biorąc pod uwagę strukturę próbkowania:Jak mogę dołączyć/rozszerzyć plik jade z katalogu głównego mojego katalogu szablonów w trybie ekspresowym?

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

Czy jest jakiś sposób mogę przedłużyć layout.jade w example.jade bez konieczności śledzenia liczby katalogów nadrzędnych?

ten działa zgodnie z przeznaczeniem tho:

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

Ale lepiej byłoby zrobić coś takiego:

extends /layout 

lub nawet alias/hardlink i używać go jak:

extends layout 

Zakładając, że ktoś zna rozwiązanie, czy można go również zastosować do włączenia?

+0

Ran do tej samej kwestii. Skończyłem z użyciem nieprzyjemnego "../../ .." podejścia, ale jestem zaskoczony, że jeszcze nie rozwiązano go w bardziej przyjemny sposób. –

+1

@JoshPinter zobacz moją odpowiedź poniżej –

Odpowiedz

1

Wprowadzono zmianę, która została wprowadzona w this particular commit.

Zasadniczo, jeśli pierwszy znak znaleziony w instrukcji include zawiera przedni ukośnik i jest zdefiniowany, będzie szukał szablonu w tej ścieżce.

należy najpierw skonfigurować Jade:

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

Następnie z każdej matrycy, bez względu na to, jak głęboko zagnieżdżone, można zrobić:

include /layout 
0

Po przyjrzeniu się samemu kodowi zdałem sobie sprawę, że ktoś nie może po prostu odwołać się do pliku jade związanego z szablonem głównym.

Jednak proste podejście jest patch jade/lib/parser.js zastąpienie dwóch wystąpień:

, dir = dirname(this.filename); 

Z:

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

równie dobrze mogę cię ostrzec, że nie jest wystarczająco przetestowany i nie jest przeznaczony do użytku produkcyjnego.

Powiązane problemy