1

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

我的视图目录结构如下

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

我正在快速设置一个视图目录

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

在 pages/landing.ejs 我使用

<% include ../partials/header %>

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

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

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

<% include partials/header %>

EJS 是否支持本机?

4

2 回答 2

0

目前,EJS 不支持此功能。但是,我在这个答案中描述了一个 hack EJS include file relative to project root

希望能解决您的问题。

于 2019-09-30T17:39:33.020 回答
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等等。

如果您知道更多,如果您可以改进代码,请写评论或其他内容。谢谢。

于 2021-03-18T19:03:36.117 回答