包含部分纳米[haml]

时间:2014-01-02 00:48:30

标签: layout haml render partial nanoc

我在规则文件中有这个:

compile '/gallery/' do  
  filter :haml
  layout :'gallery'
end  
...
compile '/' do  
  filter :haml
  layout :'default'
end  
...
route '/gallery/' do  
  nil
end
...
route '*' do  
  item.identifier.chop + '.' +item[:extension]
end

,所以现在我的content / index.html通过haml过滤器并编译为output / index.html 一切都很好。 我的内容/ gallery.html包含此代码,该代码也通过haml:

#gallery-container  

%ul.items-small  
  %li.item  
    - @item.children.each do |img|  
      %a{:href => "#{img.path}"}  

%ul.items-big  
  %li.item-big  
    - @item.children.each do |img|  
      %a{:href => "#"}  
        %figure  
          %img{:src => "#{img.path(:rep => :thumbnail)}"}  
          %figcaption.img-caption Caption  

,它收集content/gallery/文件夹中的一些图像,当我设置路由到output/gallery/index.html(看到预览输出吐出)时,我确实得到了我想要的东西,所以一切都很顺利。

但是现在我想在content/index.html中使用生成的代码作为部分代码 当我尝试像=render 'gallery'那样包含它时,我没有得到我期望的代码。反过来我收到错误消息LocalJumpError: no block given (yield)

我的layouts/gallery.html文件应包含哪些内容?如果我放在<%= yield %>,我会收到上述错误,如果我删除=render 'gallery'则没有错误,
但是,如果我在layouts/gallery.html中添加了一些文字并在我的index.html中再次使用=render 'gallery',那么我会在layouts/gallery.html中得到该文字,因此它会被包含在内并且没有错误。我应该&lt;%= yield%&gt;那个库代码我期待layouts/gallery.html然后从index.html调用= render'gallery'?但这不起作用。此外layouts/default.html已经有自己的产量正在运行,然后我尝试在项目中使用那个= render,这将通过该产量进行编译。我做错了吗?我搞不清楚了!

我的所有布局文件都经过:erb过滤。

所以我的问题是如何包含这部分内容。谢谢!

2 个答案:

答案 0 :(得分:1)

经过一些尝试和错误后,似乎应该这样做,

= items["/gallery/"].compiled_content

,如果我把它放到我的content/index.html.haml文件中,我会得到我期望的结果,而我的content/gallery.html.haml会在那个地方呈现。我还不舒服,我会在哪里使用render部分,以及使用它和我在这里使用的那个有什么不同。

答案 1 :(得分:0)

在深入研究代码之后,我找到了另一个解决方案。

渲染方法是Helpers::Rendering的一部分,如果您查看源代码,您会看到它从规则(github)调用filter_for_layout

因此,您只需将以下内容添加到Rules文件中:

layout '/gallery/', :haml, encoding: 'utf-8'

这样,当渲染图库布局时,它将像其他布局一样通过haml过滤器。