Ich versuche, Embedded Javascript Renderer für den Knoten zu verwenden: https://github.com/visionmedia/ejs
Ich möchte wissen, wie ich eine andere Ansichtsdatei (teilweise) in eine .ejs-Ansichtsdatei aufnehmen kann.
Ich versuche, Embedded Javascript Renderer für den Knoten zu verwenden: https://github.com/visionmedia/ejs
Ich möchte wissen, wie ich eine andere Ansichtsdatei (teilweise) in eine .ejs-Ansichtsdatei aufnehmen kann.
Antworten:
Mit Express 3.0:
<%- include myview.ejs %>
Der Pfad ist relativ zu dem Aufrufer, der die Datei enthält, und nicht zu dem mit eingestellten Ansichtenverzeichnis app.set("views", "path/to/views")
.
(Update: Die neueste Syntax für ejs v3.0.1 ist <%- include('myview.ejs') %>
)
<%- include('partials/footer') %>
funktioniert auch
In Express habe 4.x
ich Folgendes zum Laden verwendet ejs
:
var path = require('path');
// Set the default templating engine to ejs
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
// The views/index.ejs exists in the app directory
app.get('/hello', function (req, res) {
res.render('index', {title: 'title'});
});
Dann brauchen Sie nur zwei Dateien, damit es funktioniert - views/index.ejs
:
<%- include partials/navigation.ejs %>
Und die views/partials/navigation.ejs
:
<ul><li class="active">...</li>...</ul>
Sie können Express auch anweisen, es ejs
für HTML-Vorlagen zu verwenden:
var path = require('path');
var EJS = require('ejs');
app.engine('html', EJS.renderFile);
// Set the default templating engine to ejs
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
// The views/index.html exists in the app directory
app.get('/hello', function (req, res) {
res.render('index.html', {title: 'title'});
});
Schließlich können Sie auch das ejs
Layoutmodul verwenden:
var EJSLayout = require('express-ejs-layouts');
app.use(EJSLayout);
Dies wird das views/layout.ejs
als Ihr Layout verwenden.
Ab Express 4.x.
app.js.
// above is all your node requires
// view engine setup
app.set('views', path.join(__dirname, 'views')); <-- ./views has all your .ejs files
app.set('view engine', 'ejs');
error.ejs
<!-- because ejs knows your root directory for views, you can navigate to the ./base directory and select the header.ejs file and include it -->
<% include ./base/header %>
<h1> Other mark up here </h1>
<% include ./base/footer %>
Express 3.x unterstützt teilweise nicht mehr. Entsprechend dem Beitrag ejs 'Teil ist nicht definiert' können Sie das Schlüsselwort "include" in EJS verwenden, um die entfernte Teilfunktionalität zu ersetzen.
In der offiziellen Dokumentation https://github.com/mde/ejs#includes wird gezeigt, dass folgende Arbeiten enthalten sind:
<%- include('../partials/head') %>
app.js hinzufügen
app.set('view engine','ejs')
Fügen Sie Ihre Teildatei (ejs) in Ansichten / Partials hinzu
in index.ejs
<%- include('partials/header.ejs') %>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">
<form method="post" class="mt-3">
<div class="form-group col-md-4">
<input type="text" class="form-control form-control-lg" id="plantName" name="plantName" placeholder="plantName">
</div>
<div class="form-group col-md-4">
<input type="text" class="form-control form-control-lg" id="price" name="price" placeholder="price">
</div>
<div class="form-group col-md-4">
<input type="text" class="form-control form-control-lg" id="harvestTime" name="harvestTime" placeholder="time to harvest">
</div>
<button type="submit" class="btn btn-primary btn-lg col-md-4">Submit</button>
</form>
<form method="post">
<table class="table table-striped table-responsive-md">
<thead>
<tr>
<th scope="col">Id</th>
<th scope="col">FarmName</th>
<th scope="col">Player Name</th>
<th scope="col">Birthday Date</th>
<th scope="col">Money</th>
<th scope="col">Day Played</th>
<th scope="col">Actions</th>
</tr>
</thead>
<tbody>
<%for (let i = 0; i < farms.length; i++) {%>
<tr>
<td><%= farms[i]['id'] %></td>
<td><%= farms[i]['farmName'] %></td>
<td><%= farms[i]['playerName'] %></td>
<td><%= farms[i]['birthDayDate'] %></td>
<td><%= farms[i]['money'] %></td>
<td><%= farms[i]['dayPlayed'] %></td>
<td><a href="<%=`/farms/${farms[i]['id']}`%>">Look at Farm</a></td>
</tr>
<%}%>
</table>
</form>
EJS allein erlaubt derzeit keine partiellen Ansichten. Express tut.