【问题标题】:How do I include a haml file in haml?如何在haml中包含haml文件?
【发布时间】:2013-12-09 01:01:25
【问题描述】:

如何在 haml 中包含 haml 文件?它没有在文档中描述。 (This question 谈到插入参数化模板,但这不是我想要的。)

我正在使用 Sinatra,但我希望它没关系。

插入纯 HTML 更容易吗?

【问题讨论】:

  • 如果您不是在寻找参数化模板,那该怎么办?你需要它做什么?
  • 代码/模板组织而不是重复自己。我有一些应该出现在多个模板中的东西(脚本、页眉、页脚等)
  • 模板是否必须根据参数进行更改?
  • 不可以使用参数化模板,但是在每个页面上重复导入有点乏味。因此建议的答案如下。

标签: sinatra haml


【解决方案1】:

看来你想要的是一个布局模板。我不久前用 sinatra 自己做了这个,它真的很方便。将您想要的常见内容放在 views/layout.haml 中 - 这可能是一个完整的 HTML 文档,其中包含头部和主体以及给定页面上相同的所有内容。

%head
  -# some head tags here
%body
  -# header menu here
  = yield
  -# a bit footer here

产量部分是您希望在页面之间拥有不同内容的地方。 (它使用内置的 Ruby 方法 yield 来执行一个已经传入的块。如果你熟悉 Ruby,你就会知道这意味着什么 - 否则不要想太多,直到你有一些有用的东西。)

然后在您调用 haml 的 sinatra 代码中,您只需照常执行操作,sinatra 就会为您提取布局文件。

haml :specific_page

如果您想更具体地了解您的布局在哪里,您可以传入一个命名布局:

haml :specific_page, layout: :other_layout

它会寻找other_layout.haml 而不是布局。你也可以关闭布局:

haml :specific_page, layout: false

我认为这就是你所追求的。它实际上在 sinatra 文档中,但不在关于 haml 的部分中。不管你使用什么模板引擎,它都是这样工作的。

【讨论】:

  • 页面之间的重用很少,所以我真的更喜欢 %include 指令,但它似乎不存在。我猜你的答案是第二好的。
  • 我有点喜欢这种布局方法。 :-) 你为什么不喜欢render 方法? haml.info/docs/yardoc/Haml/Engine.html#render-instance_method 。如果你不想,你不必参数化它。
  • render 似乎是我想要的,谢谢!我没有足够仔细地阅读另一个问题。
猜你喜欢
  • 2020-09-25
  • 2012-03-12
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2014-02-14
相关资源
最近更新 更多