在EJS模板引擎中,如何“包含”页脚?

66

假设我保存了一个页脚的片段,我该如何在当前模板中“包含”它?


1
你可以尝试使用 <%-include('your-path')%>。 - Hieu.Gi
9个回答

94

我知道这个问题已经被标记为已回答,但我认为你要找的是 'partial' 语法。在 EJS 中,你可以像这样在一个视图模板中包含另一个视图模板的内容:

<html>
  <head></head>
  <body>
    Blah blah blah
    <%- partial('footer') %>    
  </body>
</html>

16
EJS中的Partials已被移除,但现在可以使用“include”语法。请参见此处:https://dev59.com/OGgu5IYBdhLWcg3wZmQm#11835644 - Alexander Mills

56

EJS 很容易使用 include。以下是 EJS README 中的描述:

使用 include 时相对于模板路径,例如如果你有 './views/users.ejs' 和 './views/user/show.ejs',你应该使用 '<%- include('user/show'); %>'。

建议在 include 中使用原始输出标签('<%-')以避免 HTML 输出双重转义。

<ul>
  <% users.forEach(function(user){ %>
    <%- include('user/show', {user: user}); %>
  <% }) %>
</ul>
所以,在你的情况下,如果页脚与你想要包含它的文件在同一个目录中,你只需要在文件中添加 <% include('footer') %>

1
如果页脚模板位于父目录中,<% include ../footer %> 这样写能正常工作吗? - user9903
3
可以,那也可以。只要您的 node 进程可以读取到,您就可以使用任何存储在文件系统上的 ejs 文件路径。请注意,不要改变原意,同时使句子通俗易懂。 - DanArl
如此奇怪的语法...竟然可以在不使用引号或其他任何东西的情况下包含../footer - Eduard Luca
1
这个不起作用,除非将路径/文件名放在引号和括号中。EJS文档显示<%- include('header'); -%>。 - devspeter

22

正确的语法是 <%- include('<path>', <object with extra parameters>) %>

include是一个函数。 包含文件路径相对于调用include的模板。(这需要'filename'选项。) 例如,如果你有"./views/users.ejs"和"./views/user/show.ejs",你将使用<%- include('user/show'); %>。

你可能希望在使用include时使用原始输出标记(<%-),以避免HTML输出被双重转义。


这就是我一直在寻找的东西:是否可以为包含的部分视图提供自己的模型数据。你有关于这方面的文档超链接吗? - Mike Finch
我已经在这里找到了相关的文档:https://ejs.co/ - Mike Finch

19

您可以通过以下方式包含ejs模板:

<% include includes/header.ejs %>

2
我认为那样做不会起作用,你需要使用<%-而不是<%来获取渲染输出。在<%、<%-和<%=之间有所不同,请阅读文档。 - Vikas Kandari
我同意@VikasKandari的观点。EJS文档建议使用原始输出标签<%-,因为它会插入未转义的值。 - TheLandolorien

12

在同一目录下
<%- include('header'); -%>

在根目录下
<%- include('../partials/header'); -%>

适用于 EJS v3.0.1


它对我来说是有效的。但为什么我们要这样使用?有什么原因吗?如果有人知道,请分享。谢谢... - Fawwad
使用这个后,我在关闭模态框之后遇到了背景问题。 - omkar

4

通过使用以下语法,可以在ejs中轻松使用include:

<% include 文件名 %>

注意:文件应该位于视图内部。


2

这个语法 <% include filename %> 不再起作用。 <%- include('[相对路径]'); %> 这个语法是有效的。


0

要包含文件,您应该从调用include函数的文件中给出相对地址。 例如,我假设我需要在当前文件中调用file.ejs。

<%- include('file.ejs') -%>

如果我的 file.ejs 文件在一个文件夹内,那么:
<%- include('folder/file.ejs') -%>

-1
假设你的 partials 存在于一个名为 partial 的目录中
不要使用 <% partials/header %> 尝试使用 <%- include('partials/header') %> 这对我很有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接