記事内にerbのコードブロックを書くとエラーが発生
私は記事をMarkdownで書いていますが、より柔軟に変数やロジックを使いたいため、拡張子を.html.md.erb
とし、erbで動的に生成したMarkdownがhtmlに変換されるようにしています。
その記事内で以下のコードを書きました。
1 2 3 4 5 6 7 |
``` erb <% wrap_layout :layout do %> <article> <%%= yield %> </article> <% end %> ``` |
すると以下のエラーが発生しました。
1 |
RuntimeError: Tried to render a layout (calls yield) at /Users/hoge/blog/webfood/source/articles/2015-11/middleman-wrap-layout-doesnt-work-as-the-doc/index.html.md.erb like it was a template. Non-default layouts need to be in source/layouts. |
エラーの全量はこちら。
原因
erbのファイルなので、erbのコードが実行されてしまうということです。実行されるべき場所ではないので、エラーが発生します。
解決策
%
を2つにするとerbのコードをエスケープ(実行されないように)できます。見た目は意図した通り%
1つだけ表示されます。具体的には以下のように書きます。
スポンサーリンク
拡張子が.html.md.erbの場合
1 2 3 4 5 6 7 |
``` erb <%% wrap_layout :layout do %> <article> <%%= yield %> </article> <%% end %> ``` |
拡張子が.html.erbの場合
1 2 3 4 5 6 7 |
<% code("erb") do %> <%% wrap_layout :layout do %> <article> <%%= yield %> </article> <%% end %> <% end %> |
参考
erbのタグをエスケープするには%% とパーセントを2つ書く。