EJS在相对于设置视图路径的嵌套目录中包括部分内容

时间:2019-09-30 09:41:55

标签: node.js express ejs

当前,我使用Express with EJS作为模板引擎。我的问题是,相对于嵌套视图中当前目录的路径,而不是相对于设置的基本视图目录而言的路径,而不求助于黑客。

我的views目录的结构如下

+--/views
  |
  +--partials/
  | |
  | +--header.ejs
  | +--footer.ejs
  |
  +--pages/
  | |
  | +--blog/
  | | |
  | | +--new.ejs
  | | +--show.ejs
  | |
  | +--landing.ejs
  | +--(More files)
  |
  +--index.html

我正在用express设置视图目录

app.set('views', path.join(__dirname, 'views'));

在我使用的pages / landing.ejs中

<% include ../partials/header %>

在更深层的嵌套视图中,例如pages / blog / new.ejs

<% include ../../partials/header %>

它有效,我的意图是使用基本路径是相对于两个文件中的set view目录的,如下所示:

<% include partials/header %>

EJS本身支持吗?

2 个答案:

答案 0 :(得分:1)

当前,EJS不支持此功能。但是,我在此答案EJS include file relative to project root

中描述了一种黑客行为

希望能解决您的问题。

答案 1 :(得分:0)

我找到了解决办法。我不知道如果你在在线网站上使用它会发生什么!

  1. 首先创建一个名为 app.locals.js 的文件并在其中写入以下代码:
module.exports = {
    static: process.cwd() + "/static/",
    views: process.cwd() + "/views/",
    layouts: process.cwd() + "/views/layouts/",
    pages: process.cwd() + "/views/pages/",
    partials: process.cwd() + "/views/partials/",
    components: process.cwd() + "/views/components/",
}
  1. app.js 文件中:
const express = require("express");
const appLocals = require("./app.locals");

const app = express();
app.locals = appLocals;
  1. 像这样使用它:
<%- include(components + "post.ejs") %>
<%- include(partials + "header.ejs") %>

您不需要在 .ejs 文件中导入任何内容。您可以直接访问componentspartials

如果你知道更多,如果你可以改进代码,请写评论什么的。谢谢。