【问题标题】:How to render html into a page but not as the entire view into an Node.js + express app?如何将 html 呈现到页面中,而不是将整个视图呈现到 Node.js + express 应用程序中?
【发布时间】:2014-01-02 23:38:08
【问题描述】:

意图
我需要将部分 hmtl 渲染到页面中。

问题
页面在没有样式或布局的情况下呈现。


我有一个页面,我需要使用纯 html 而不是玉石。但仍将在其他地方使用玉石。

我跟着similar question 进入了一个 html 页面。但是如果没有传入样式和布局。

我的上一页是cases.jade,是这样开始的

extends layout

block content
  .row
    .twelve.columns
      h1 title

现在我的新页面是cases.html 并且开始是这样的

<div class="row">
  <div class="twelve columns">
    <h1>Before &amp; After Case Gallery</h1>

并被路由到这样的

app.get('/cases', function (req, res)
{
  res.render('cases.html');
});

上面有这个

app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);

【问题讨论】:

  • 为什么要从 Jade 切换到 HTML?
  • @ŠimeVidas 这个特定页面有很多嵌套元素。我是玉石新手,html-to-jade 转换器有很多间距,我最终不得不修复。在这一点上,我只想让它发挥作用。稍后我可以转换。但是我不想拖慢交货日期,我总是可以在布局完善后进行转换。

标签: javascript html node.js express


【解决方案1】:

似乎在您的玉文件中,您正在扩展布局页面,因此您包含所有布局信息。但在 HTML 版本中,您不会导入任何布局信息。

我看到你正在使用ejs。查看布局,看看要在模板中添加什么:

<% include head %>
<h1>Title</h1>
<p>My page</p>
<% include foot %>

在这里,您需要执行&lt;%include layout %&gt; 之类的操作,并将您的布局页面内容放在layout.html 中。 include 行基本上会将文件的内容复制粘贴到该位置。

【讨论】:

  • 问题是 layout.jade 应该包装 HTML 代码,所以 &lt;%include layout %&gt; 不能开箱即用。 OP 必须将 layout.jade 复制粘贴到两个文件中。
  • 因此,您可能会建议制作&lt;head&gt;footer.html 版本,其列表与我的layout.jade 中的列表相同?因为否则我不必创建layout.html 并将其列为“案例”视图的模板吗?
  • 好的,这确实有效,您在上下文中回答了。我只更改了 &lt;% include includes/head %&gt; 。但是我的项目现在的布局方式感觉有点hacky。
  • 我真诚地建议您坚持使用更强大的模板系统,例如玉石。有很多用于 javascript 的模板系统(甚至像 mustasche 这样的东西也可以工作)。不过,您可能有这种变化的原因。在 mustasche 中,您将制作一个“布局”模板,将“内容”之类的参数作为参数,并以这种方式呈现布局。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
相关资源
最近更新 更多