Użyj zmiennej w Jade include
Pracuję z Jade i Express i chciałbym użyć zmiennej w moim oświadczeniu include. Na przykład:
App.js
app.get('/admin', function (req, res) {
var Admin = require('./routes/admin/app').Admin;
res.render(Admin.view, {
title: 'Admin',
page: 'admin'
});
});
Układ.jade
- var templates = page + '/templates/'
include templates
Kiedy to robię dostaję błąd EBADF, Bad file descriptor 'templates.jade'
I even tried
include #{templates}
Bezskutecznie.
4 answers
AFAIK JADE nie obsługuje dynamicznych w tym. Proponuję "załączyć" poza szablon, czyli
App.js
app.get('/admin', function (req, res) {
var Admin = require('./routes/admin/app').Admin;
var page = 'admin';
var templates = page + '/templates/';
// render template and store the result in html variable
res.render(templates, function(err, html) {
res.render(Admin.view, {
title: 'Admin',
page: page,
html: html
});
});
});
Układ.jade
|!{ html }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-26 19:44:40
To również działa:
//controller
var jade = require('jade');
res.render('show', {templateRender: jade.renderFile});
//template
!= templateRender('my/path/'+dynamic+'.jade', options)
Prawdopodobnie nie zwiększy to wydajności, jakiej można oczekiwać po użyciu ustawienia 'view cache' (domyślnie jest włączone w NODE_ENV = = = 'production'). Lub nawet złamać aplikację (np. jeśli pliki nie są dostępne na dysku twardym podczas wdrażania nowego kodu). Również próba użycia tej sztuczki w aplikacji po stronie klienta lub izomorficznej nie zadziała, ponieważ szablon nie może być skompilowany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 19:44:44
Znalazłem tę stronę w googlach dla tego samego pytania, ale w innym kontekście, więc pomyślałem, że moje rozwiązanie (Czytaj: obejście) tutaj dla potomności:
Chciałem otoczyć mój include większym kontekstem wyciągniętym ze zmiennej, np. (uproszczony):
- var templates = page + '/templates/'
- var headid = page + 'head'
- var imgsrc = '/images/' + page
div(id=headid)
h1 #{page}
img(src=imgsrc)
div(id=page)
include templates
Ponieważ to nie działa (Jade nie obsługuje Dynamic includes, jak zauważył freakish), użyłem mixin:
(Edit-trochę bardziej eleganckie niż moje poprzednie obejście:)
mixin page1
include page1/templates
mixin page2
include page2/templates
...
- for (var i = 0; i < 3; i++)
- var page = 'page' + i
- var headid = page + 'head'
- var imgsrc = '/images/' + page
div(id=headid)
h1 #{page}
img(src=imgsrc)
div(id=page)
+page
Mój poprzedni odpowiedź:
mixin templates(page)
- var headid = page + 'head'
- var imgsrc = '/images/' + page
div(id=headid)
h1 #{page}
img(src=imgsrc)
+templates('page1')
#page1
include page1/templates/
+templates('page2')
#page2
include page2/templates/
...
Nie jest elegancki, i nie będzie działać, jeśli trzeba dołączyć więcej niż kilka rzeczy w ten sposób, ale przynajmniej część Jade jest dynamiczna.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-14 00:27:42
Dlaczego nie używać dziedziczenia jade?
Renderuj to, co chcesz na poziomie middleware:
res.render('templates/' + template_name + '.jade')
Write common common.jade
:
h1 This is a page
.container
block sublevel
h2 Default content
Następnie zapisz plik rozszerzający common.jade
:
extends common.jade
block sublevel
h2 Some things are here
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-01 17:12:07