首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Jade模板布局不能与Node.js结合使用

Jade模板布局不能与Node.js结合使用
EN

Stack Overflow用户
提问于 2012-04-18 05:26:21
回答 4查看 17.4K关注 0票数 16

我正在尝试用Node.js创建一个简单的服务器,它使用Jade模板和布局。由于某些原因,它只会加载模板,而不会加载布局。

下面是我得到的信息:

main.js

代码语言:javascript
复制
var express = require('express');

var app = express.createServer();

app.set('views', __dirname + '/views'); 
app.set('view engine','jade');
app.set('view options', {
 layout: true
});

app.get('/', function(req,res) {
res.render('index', { title: 'My site' });
});

app.listen(4000);

正如您所看到的,布局已启用。我尝试过在render方法中直接引用它,但这并没有什么不同。值得注意的是,“标题:‘我的网站’”也不起作用。

index.jade

代码语言:javascript
复制
h2 Hello!
p I really hope this is working now

lo.jade

代码语言:javascript
复制
!!! 5
html
  head
    title Why won't this work
  body
    h1 I AM A LAYOUT
    div= body

这是我的npm list

代码语言:javascript
复制
├─┬ express@3.0.0alpha1 
│ ├── commander@0.5.2 
│ ├─┬ connect@2.1.2 
│ │ ├── crc@0.1.0 
│ │ ├── formidable@1.0.9 
│ │ ├── mime@1.2.4 
│ │ └── qs@0.4.2 
│ ├── debug@0.6.0 
│ ├── mime@1.2.5 
│ └── mkdirp@0.3.1 
└─┬ jade@0.24.0 
  ├── commander@0.5.2 
  └── mkdirp@0.3.0 

有什么办法解释为什么这个不起作用吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-18 06:01:32

我认为你做布局的方式是错误的。我这样做:

我将布局设置为false:

代码语言:javascript
复制
app.set('view options', {
    layout: false
});

在layout.jade文件中:

代码语言:javascript
复制
doctype 5
html(lang="en")
    head
        title MySite #{title}
body
    block mainContent

在呈现的页面(假设是: home.jade)中,包含一个变量(content)

代码语言:javascript
复制
extends layout

block mainContent
    h1 This is home
    p= content

您可以有另一个基于(扩展)具有不同变量(用户)的相同布局(other.jade)的页面

代码语言:javascript
复制
extends layout

block mainContent
    h1 Oh look ! Another page
    p= user

像这样叫他们:

代码语言:javascript
复制
app.get('/', function(req, res) {
    res.render('home', { 
        title : "Home",
        content: "Some Home page content"
    });
});

app.get('/anotherPage', function(req, res) {
    res.render('other', { 
        title : "Other page",
        user: "Here goes a user name"
    });
});
票数 35
EN

Stack Overflow用户

发布于 2012-04-20 03:47:32

这似乎是对Express/jade最新版本的更改。

代码语言:javascript
复制
Express:  '3.0.0alpha1': '2012-04-18T22:47:46.812Z'
Jade:     '0.25.0':      '2012-04-18T22:40:01.162Z' 

我也被抓到了!

其他几件事也发生了变化--我花了一段时间才弄明白。

不幸的是,Express & Jade并没有特别好的文档记录,而且您在web上找到的许多示例都过时了。

Arnaud现在提供了使用布局的新方法。我不知道老方法是否有效。当然,当我尝试像dtyon这样的东西时,它似乎不再起作用。

因此,请使用以下命令检查您安装的Express & Jade的版本:

代码语言:javascript
复制
npm show express dist.tarball
npm show jade dist.tarball

希望这能有所帮助。J.

票数 9
EN

Stack Overflow用户

发布于 2012-04-18 05:34:56

据我所知,默认情况下布局文件应该命名为'layout.jade‘。但是,如果你想要一个不同的名字,你可以在渲染时使用“layout”提示选项:

代码语言:javascript
复制
res.render('index', { layout: 'lo', title: 'My site' });

我还假设lo.jade布局文件位于根目录/views/中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10199415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档