Javascript Jade包含检查实际页面的条件

Javascript Jade包含检查实际页面的条件,javascript,node.js,pug,harp,Javascript,Node.js,Pug,Harp,有没有一种方法可以检查您在Jade中的哪个页面,并在该页面中包含一些内容(部分页面或特定的CSS样式)?例如: 如果我在主页,那么只包括主页标题。jade 其他-包括正常头部。jade 以下是一个上下文中的示例: doctype html html body if HOMEPAGE include ./includes/HOMEPAGE-head.jade else include ./includes/NORMAL-head.jade h1

有没有一种方法可以检查您在Jade中的哪个页面,并在该页面中包含一些内容(部分页面或特定的CSS样式)?例如:

如果我在
主页
,那么只包括
主页标题。jade

其他-包括
正常头部。jade

以下是一个上下文中的示例:

doctype html
html
  body
    if HOMEPAGE
      include ./includes/HOMEPAGE-head.jade
    else
      include ./includes/NORMAL-head.jade

    h1 My Site
    p Welcome to my super lame site.
    include ./includes/foot.jade

谢谢大家!

我知道有两种方法

选项A:2个布局和扩展 制作两个布局:
layout.jade
layout homepage.jade
,相应地更改
include
行。大多数页面将
扩展布局
,但
索引.jade
扩展布局主页

选项B:变量块 在
layout.jade
中:

- var HOMEPAGE = false;
block variables
doctype html
html
  body
    if HOMEPAGE
      include ./includes/HOMEPAGE-head.jade
    else
      include ./includes/NORMAL-head.jade

    h1 My Site
    p Welcome to my super lame site.
    include ./includes/foot.jade
block variables
  - HOMEPAGE = true;
h1 This is your home page template...
然后在
index.jade
中:

- var HOMEPAGE = false;
block variables
doctype html
html
  body
    if HOMEPAGE
      include ./includes/HOMEPAGE-head.jade
    else
      include ./includes/NORMAL-head.jade

    h1 My Site
    p Welcome to my super lame site.
    include ./includes/foot.jade
block variables
  - HOMEPAGE = true;
h1 This is your home page template...

您的所有其他页面都将默认设置为
HOMEPAGE=false
,因此它们不需要任何更改就可以使此方法起作用。

或者,您也可以构建您的Jade,以使用继承来实现您想要的功能

例如:

layout.jade:

doctype html
html
  body
    block header
    block content
      h1 My Site
      p Welcome to my super lame site.
    block footer
      include ./includes/foot.jade
www.jade.com主页:

extends ./layout.jade

block header
  include ./includes/HOMEPAGE-head.jade
normal.jade:

extends ./layout.jade

block header
  include ./includes/NORMAL-head.jade

然后让你所有的普通页面都使用
normal.jade
,让你的主页使用
homepage.jade
我建议使用单独的布局。它利用了Harp已有的系统,并帮助维护“不同内容、不同文件”的概念。使用Harp,您可以在_data.json或_Harp.json文件中为任何给定页面指定显式布局

可以在_data.json中指定_布局以外的布局。这是 如果您需要对布局进行更精细的控制,或者如果您想这样做,这将非常有用 将布局命名为除_Layout之外的其他名称

在这里,可以通过在该文件夹的_data.json文件中指定布局,使article-one.md使用_an-example-layout.ejs:

现在,每篇文章都将使用指定的布局

如果这只是一个微小的差异,并且您无法证明拥有一个完全独立的模板是合理的,那么如果您使用Harp的
partial()
函数而不是Jade的
include
关键字,您也可以将数据传递到include。然后,处理不同变量值的逻辑将位于单个
head.jade
文件中。您的示例可能如下所示

富玉:

doctype html
html
  body
    != partial("./includes/head.jade", { page: bar })

    h1 My Site
    p Welcome to my super lame site.
    include ./includes/foot.jade
head.jade现在应该可以访问页面变量


第三个选项可以利用Harp注入到模板中的
current
对象。如果您正在访问
//site.com/foo/bar
current.source==“bar”
current.path==“foo”,“bar”
。您可以使用此对象动态设置类名等。您可以在此处了解更多信息:

谢谢您的回答。但尽管有检查实际页面的想法。我可以有一些类似的部分,就像在“Laravel刀片模板”?我的意思是,在master-template.jade中定义“header”或“top”部分,并仅在我希望它出现的页面中插入“header”或“top”?你能给我举一些这样做的例子吗?谢谢,我不能使用你在回答中解释的方式,因为我使用的是Harp(静态站点生成器和服务器),它不允许我创建app.js。这里是刀片的例子