Layouts in Express 3 and EJS

前端 未结 3 848
野的像风
野的像风 2021-02-01 22:49

In version 3 of Express some features were removed:

the concept of a \"layout\" (template engine specific now)
partial() (template engine specific)
相关标签:
3条回答
  • 2021-02-01 23:11

    I struggled with this as well. So I put up a github project with an example for ejs and dustjs.

    https://github.com/chovy/express-template-demo

    I'm not sure the difference between a partial and an include, you don't need to explicitly pass data to an include. Not sure why you would want a partial.

    But for a layout, you just specify a block like this:

    //layout.ejs
    <html>
    <%- body %>
    </html>
    
    //page1.ejs
    <% layout('layout') -%>
    This is loaded from page 1 and overrides <%- body %> in the layout.ejs.
    

    If anyone wants to add more examples, just submit a pull request.

    0 讨论(0)
  • 2021-02-01 23:17

    It seems that from Express 3, layout feature is delegated to the responsibility of template engines. You can use ejs-locals (https://github.com/RandomEtc/ejs-locals) for layout.

    Install ejs-locals

    npm install ejs-locals --save
    

    Use ejs-locals as your app engine in app.js

    var express = require('express');
    var engine = require('ejs-locals');
    ...
    
    app.engine('ejs', engine);
    app.set('view engine', 'ejs');
    

    Now you can use layout

    layout.ejs
    <body>
      <%- body %>
    </body>
    
    index.ejs
    <% layout('layout') -%>
    
    <div class="container">
    <div class="jumbotron">
    ...
    

    Another option is to use express-partials (https://github.com/publicclass/express-partials). The two do the same thing, so it's just your choice.

    0 讨论(0)
  • 2021-02-01 23:24

    You can mimic the EJS layouts in Express 2.x with the "include" option. See my answer here:

    https://stackoverflow.com/a/12477536/446681

    0 讨论(0)
提交回复
热议问题