4

我正在尝试使用 express 并呈现 layout.jade 我的目录树非常标准。

├── apps
│   └── fridge_face
│       ├── routes.coffee
│       └── views
|           └── index.jade
├── server.js
└── views
    ├── layout.jade
    └── stylesheets
        └── style.styl

在我的 routes.coffee 中,当我渲染 index.jade 时,一切都很好,但没有渲染布局。我曾尝试将布局移入apps/fridge_face/views/,但没有成功。

我没有做布局配置。

这是我的

布局.jade

doctype 5
html
  head
    title 'What is up'
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    != body

路线.咖啡

routes = (app) ->
  app.get '/', (req, res) ->
    Word.once 'wordsFetched', (params) ->
      res.render "#{__dirname}/views/index",
        layout: true
        words: params.map (word) -> word.word

    Word.getWords()


module.exports = routes

server.js 配置

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express['static'](__dirname + '/public'));
});

如您所见,没有任何东西可以或会使布局无法呈现...我做错了什么我如何快速找到我的布局

编辑


我知道我让这个问题变得超长,但增加了一些进展。第一的

当我!=从两个目录的布局中删除时,没有任何变化。我的视图仍然是免费的。

当我添加

app.set('view options', {
  layout: false
});

然后在我的视图中显式呈现我的布局

layout: "#{__dirname}/views/layout"
# OR
layout: "layout"
# OR
layout: true

什么都没有发生,视图被渲染为免费布局......

4

4 回答 4

6

正如上面有人所说,您使用的是 3.0 版,它摆脱了布局和部分,并让模板引擎处理。这是通过迁移 wiki 获得的答案:

“要使用 EJS 恢复布局功能,您可以使用express-partials或 ejs-locals。”

(来自https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

我最终使用了 express-partials,它的工作方式与他们的示例完全相同。我无法发布指向 ejs-locals 的链接,因为我还没有足够的声誉,但您可以在 wiki 上找到它。

于 2012-10-17T00:43:06.520 回答
1

您在新的 express 版本中使用过时的代码。模板系统的新用法请参见http://github.com/visionmedia/jade

于 2012-07-19T13:57:25.250 回答
0

尝试在调用时明确指定布局文件的路径render。快递文档中有一个示例:

res.render('page', { layout: __dirname + '/../../mylayout.jade' });

我的猜测是 express/jade 中存在不同的逻辑,具体取决于视图名称是不合格的还是指定为文件系统路径。

于 2012-07-19T13:56:35.570 回答
0

如果布局不起作用,您可以尝试使用部分,我正在使用 ejs :

app.get('/', function(req,res){
 res.render('layout.ejs', { layout:false,
   locals : {
        body: '../apps/index.ejs' ,
        name : "Daniel"
 }});
});

在 layout.ejs 中:

<html>
...
<%-partial(body)%>
<html>

在 index.ejs 中:

<h1>Hola</h1>
<%=name%>
于 2012-07-19T14:22:27.333 回答