82 votes

Node.js - EJS - inclure une partie

Je suis en train d'essayer d'utiliser le moteur de rendu JavaScript intégré pour node : https://github.com/visionmedia/ejs

J'aimerais savoir comment je peux inclure un autre fichier de vue (partiel) à l'intérieur d'un fichier de vue .ejs.

3 votes

Le système partiel fait en fait partie d'ExpressJS, je crois. Utilisez-vous le framework Express?

0 votes

Non, je n'utilise pas ça .. Je devrais probablement emprunter cette voie si ce n'est pas possible avec juste un moteur de modèles.

168voto

pkyeck Points 6158

Avec Express 3.0 :

<%- include myview.ejs %>

le chemin est relatif à l'appelant qui inclut le fichier, et non au répertoire des vues défini avec app.set("views", "chemin/vers/vues").

Inclusions EJS v1
Inclusions EJS v2

(Mise à jour : la syntaxe la plus récente pour ejs v3.0.1 est <%- include('myview.ejs') %>)

2 votes

Cela devrait être la bonne réponse car le développeur d'ejs / express a mis à jour le code.

2 votes

En ejs2, j'avais du code qui ressemblait à ceci et qui fonctionnait. <% include myview.ejs %> En ejs3, il doit ressembler à ceci <%- include('myview.ejs') %> Devinez le nombre d'heures qu'il m'a fallu pour réaliser que je devais ajouter le tiret au début? (Je rajoute ce commentaire au cas où quelqu'un d'autre dans la même situation le lirait.)

0 votes

<%- inclure('partials/footer') %> fonctionne également

22voto

asapxj07 Points 301

Fonctionne avec Express 4.x :

La bonne façon d'inclure des partiels dans le modèle selon ceci est d'utiliser :

<%- include('partials/youFileName.ejs') %>.

Vous utilisez actuellement :

<% include partials/yourFileName.ejs %>

ce qui est obsolète.

21voto

czerasz Points 2135

Dans Express 4.x, j'utilisais ce qui suit pour charger ejs:

  var path = require('path');

  // Définir le moteur de template par défaut sur ejs
  app.set('view engine', 'ejs');
  app.set('views', path.join(__dirname, 'views'));

  // Le fichier views/index.ejs existe dans le répertoire de l'application
  app.get('/hello', function (req, res) {
    res.render('index', {title: 'title'});
  });

Ensuite, vous avez juste besoin de deux fichiers pour le faire fonctionner - views/index.ejs:

<%- include partials/navigation.ejs %>

Et le fichier views/partials/navigation.ejs:

......

Vous pouvez également indiquer à Express d'utiliser ejs pour les modèles html:

var path = require('path');
var EJS  = require('ejs');

app.engine('html', EJS.renderFile);

// Définir le moteur de template par défaut sur ejs
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

// Le fichier views/index.html existe dans le répertoire de l'application
app.get('/hello', function (req, res) {
  res.render('index.html', {title: 'title'});
});

Enfin, vous pouvez également utiliser le module de mise en page ejs:

var EJSLayout = require('express-ejs-layouts');
app.use(EJSLayout);

Cela utilisera le fichier views/layout.ejs comme mise en page.

2 votes

J'ai obtenu une erreur de parenthèse manquante, je dois le mettre comme <%- include ('partials/navbar.ejs') %>

10voto

Daniel Ram Points 156

À partir de Express 4.x

app.js

// ci-dessus se trouvent toutes vos nécessités pour le noeud

// configuration du moteur de vue
app.set('views', path.join(__dirname, 'views')); <-- ./views contient tous vos fichiers .ejs
app.set('view engine', 'ejs');

error.ejs

<% include ./base/header %> 
 Autre balisage ici 
<% include ./base/footer %>

4voto

VCD Points 418

Express 3.x ne prend plus en charge partiellement. Selon l'article ejs 'partial is not defined', vous pouvez utiliser le mot-clé "include" dans EJS pour remplacer la fonctionnalité partiellement supprimée.

1 votes

Vérifiez ejs-locals pour le support expresss 3.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X