EJS动态包括

时间:2017-05-29 22:51:39

标签: javascript node.js ejs

我试图使用EJS动态地包含我的部分内容。我渲染一个这样的模板:

路由器

router.get('/', noteController.getNotes, (req, res, next) => {
    return res.render(template, {'page':'all'})
})

我试图在此模板中包含部分内容,基于变量" page"。

template.ejs

<% include %><%= page %><% .ejs %>

然而,这不起作用。我尝试了多种方法,但无济于事。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

简单地:

<%- include(page) %>

或者如果它在partials文件夹中:

<%- include('partials/'+page) %>



附:不要忘记将视图引擎声明为ejs

app.set('view engine', 'ejs');


来自official source

  

&lt;% - 将未转义的值输出到模板

     

您可能希望将原始输出标记(&lt;% - )与您的include一起使用   避免双重转义HTML输出。

答案 1 :(得分:0)

例如使用登录页面

app.get('/login', (req, res)=>{
  res.render('layout', {page: 'login'})
})

这里是简单的layout.ejs

<body>
    <% include ./templates/nav %>
        <div class="row">
            <div class="col-md-2">
                <% include ./templates/leftbar %>
            </div>
            <div class="col-md-8">
                <%- include(page) %>
            </div>
            <div class="col-md-2">
                <% include ./templates/rightbar %>
            </div>
        </div>
        <% include ./templates/footer %>
</body>

login.ejs

<h1>Login</h1>
<form method="POST" action="/login">
    <div class="form-group">
        <label class="control-label">Username: </label>
        <input class="form-control" type="text" name="username" placeholder="username">
    </div>
    <div class="form-group">
        <label class="control-label">Password:</label>
        <input class="form-control" type="text" name="password" placeholder="password" />
    </div>
    <input class="btn btn-info" type="submit" value="Login">
</form>