如何在 Rails 的 ERB 模板中使用 `<%=` 来修剪最后出现在 `pre` 元素中的前导空白?

2024-03-27

(据我在这里研究,这不是一个重复的问题。修剪空格——通常是尾随换行符——正在讨论<%- or -%>,但不适合<%=。这也可能是 Erubi 模板引擎的一个小缺陷,Rails 将其用于 ERB 模板。)

我想在视图中渲染/语法突出显示代码,我的 ERB 视图模板包含:

<p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <%= highlight(@code.code, @code.language) %>
  </pre>
</p>

结果是 HTML 输出为:

<p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <span class="kt">[and here's the code, but indented too much]</span>
  </pre>
</p>

因为pre标签,第一行代码前面的空格被包含在 HTML 中并因此被渲染,导致第一行代码缩进了四个空格过多。

显然,我还可以将 ERB 视图模板制作为:

<p>
  <strong>Code:</strong>
  <pre class="highlight github">
<%= highlight(@code.code, @code.language) %>
  </pre>
</p>

但这在我的模板视图中看起来很难看(因为缩进已关闭)。

问题:我怎样才能使<%=还吞掉前导空格?我知道使用-%>因为结束标记会删除尾随空格/换行符...但我希望也删除前导空格(不仅仅是换行符)。


尝试使用concat辅助方法 https://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-concat带有以以下开头的 ERB 标签<%代替<%=:

<p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <% concat(highlight(@code.code, @code.language)) %>
  </pre>
</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Rails 的 ERB 模板中使用 `<%=` 来修剪最后出现在 `pre` 元素中的前导空白? 的相关文章

随机推荐