【发布时间】:2023-03-08 05:23:02
【问题描述】:
我正在使用 ejs 作为模板引擎构建基于 express 的节点应用程序。
为了支持网站的不同外观,我想将文件放在名为 base 的文件夹中,其中包含 vanilla 内容和每个样式/主题/客户端的叠加层。我希望系统首先在叠加层中查找文件,并且只有在未找到时才使用基础中的文件。
对于像图像和 css 文件这样的静态内容,这会使用静态中间件两次,首先用于叠加层,然后用于基础。
我想对通过 ejs 呈现的模板做同样的事情。我发现:
Multiple View paths on Node.js + Express
只要我调用简单的 ejs 视图,该线程中提供的 BananaAcids 答案几乎对我有用。如果我想使用布局或包含它,它会分解为覆盖视图,因为基本目录现在是覆盖的,并且不再找到与基本目录未更改的布局。
下面是一个简化的例子。
文件base/layouts/root.ejs:
<!DOCTYPE html>
<html lang="en">
<body>
<!-- Main content of pages using this layout goes here -->
<%- body %>
</body>
</html>
文件库/index.ejs:
<% layout('layouts/root') -%>
<p>
A page in base using the root layout
</p>
文件覆盖/index.ejs:
<% layout('layouts/root') -%>
<p>
Totally different page in the overlay.
</p>
使用 BananaAcids 方法并将两个路径设置为 view-sources express/ejs 现在可以正确地将 overlay/index.ejs 定位为要渲染的视图,但由于我没有覆盖 layouts/root,因此它失败了,因为生成的文件 overlay/layouts/ root.ejs 不存在。
有没有办法将我的方式进一步修补到 ejs 中,以便我可以帮助它在 base/layout/root.ejs 中找到这个文件?
感谢您阅读本文以及您为此花费的任何脑力周期。
【问题讨论】: