我在规则文件中有这个:
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
过滤。
所以我的问题是如何包含这部分内容。谢谢!
答案 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过滤器。