ejs include 不适用于子文件夹

Gio*_*lli 5 template-engine ejs node.js express

我正在使用 express 和 ejs 来构建一个网站:

"dependencies": {
 "ejs": "^2.5.2",
 "express": "^4.14.0",
Run Code Online (Sandbox Code Playgroud)

在我的 app.js 中,我将 ejs 定义为模板引擎和视图的根:

app.set('view engine', 'ejs'); // set view engine
app.set('views', 'app/views'); // set custom root for view engine
Run Code Online (Sandbox Code Playgroud)

然后我创建了我的 index.ejs 文件,其中包含了子目录中的一个部分:index.ejs

  <head><% include ./partials/template/head %></head>
Run Code Online (Sandbox Code Playgroud)

文件夹结构:

- views
  index.ejs
-- partials
-- -- template
      head.ejs
Run Code Online (Sandbox Code Playgroud)

当启动服务器时,索引加载没有错误但没有头部部分。如果我更改包含(指向错误的位置),服务器将无法开始突出显示问题,因此 ejs 能够找到 head.ejs。如果我在视图目录中移动 head.ejs,则 head 会正确加载到 index.ejs 中。所以......我有点困惑,似乎在子目录中文件读取但未加载到包含中。

在四处寻找之后,我尝试使用 express-partials 但它并没有太大帮助。

有什么线索吗?

干杯,乔瓦尼

小智 7

只需像这样更改您的包含语句

<%- include("./partials/template/head.ejs") %>
Run Code Online (Sandbox Code Playgroud)

这对我有用。


Gre*_*Ray 0

我认为问题与子文件夹无关。如果你看看你的代码:

  <head><% include ./partials/template/head %></head>
Run Code Online (Sandbox Code Playgroud)

我们可以看到使用了 include 指令,它将调用模板引擎并返回您想要在<head />index.ejs 部分中呈现的 html。

然而,它不会被渲染,只是因为您忘记包含“-”,它告诉它实际将内容打印到html的该部分,您也可以使用“=”,它执行相同的操作,只是转义。

因此,要修复您应该按如下方式编辑您的index.ejs:

  <head><%- include ./partials/template/head %></head>
Run Code Online (Sandbox Code Playgroud)

请注意“<%”后面包含“-”。

希望这可以帮助。