82 votes

Node.js - EJS - inclure une partie

Je suis en train d'essayer d'utiliser le moteur d'incorporation de JavaScript 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 réalité 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 template.

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 configuré avec app.set("views", "chemin/vers/vues").

EJS v1 include
EJS v2 include

(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 faut que cela ressemble à 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 ? (J'ajoute simplement ce commentaire au cas où quelqu'un d'autre dans la même situation le lise.)

0 votes

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

22voto

asapxj07 Points 301

Fonctionne avec Express 4.x :

La bonne manière d'inclure des partielles dans le template 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'ai utilisé 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 faire fonctionner - views/index.ejs:

<%- include partials/navigation.ejs %>

Et le views/partials/navigation.ejs:

......

Vous pouvez également dire à Express d'utiliser ejs pour les templates 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 views/layout.ejs comme votre mise en page.

2 votes

J'ai 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 sont toutes vos dépendances node

// 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 balises ici 
<% include ./base/footer %>

4voto

VCD Points 418

Express 3.x ne prend plus en charge les partiels. Selon l'article ejs 'partial is not defined', vous pouvez utiliser le mot-clé "include" dans EJS pour remplacer la fonctionnalité partielle 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