如何在Jekyll中填充字符串?

9

假设我要像这样递增一个整数

 {% capture page %}{{ page | plus: '1' }}{% endcapture %}

我该如何像这样填充它?
 {% capture paddedPage %}{{ page | pad '0', 4 }}{% endcapture %}

其中4是填充位数的数字,'0'是填充字符串。结果将会像这样:0001,其中page的值为1。我该如何在内联或过滤器中实现此功能?

我猜可以像sprintf('%d4', page)这样表示,但显然这种语法在liquid/jekyll中不起作用。

我对jekyll/liquid语法感到非常失望(甚至没有本地模数!)。那么,我该如何使用前导字符填充字符串呢?


你可以尝试使用Middleman,它使用ERB而不是Liquid。http://staticgen.com/middleman - Zombo
如果我要转换技术的话,我会转向一些基于Node.js并使用JS语法的技术,比如http://wintersmith.io/。 - FlavorScape
我只是在说这可能会更容易,ERB 是 Ruby 的一部分,因此这就少了一个依赖。 - Zombo
哈哈,是的,Liquid 是一种奇怪的模板选择。我猜因为它起源于电子商务,他们想要“安全”而不是语法糖。 - FlavorScape
1
最佳答案:https://dev59.com/6Ybca4cB1Zd3GeqPVWmm#37453646 - Blair Anderson
2个回答

22

使用液体过滤器prependslice,像这样:

{{ page | prepend: '0000' | slice: -4, 4 }}

3
使用 Liquid,您可以做以下事情:
{% assign pad     = 4 %}
{% assign padStr  = '0' %}
{% assign numbers = "1|12|123|1234" | split: "|" %}
{% for number in numbers %}
  {% assign strLength = number | size %}
  {% assign padLength = pad | minus: strLength %}
  {% if padLength > 0 %}
    {% assign padded = number %}
    {% for position in (1..padLength) %}
      {% assign padded = padded | prepend: padStr %}
    {% endfor %}
    <p>{{ number}} padded to {{ padded }}</p>
  {% else %}
    <p>{{ number}} no padding needed</p>
  {% endif %}
{% endfor %}

注意:Liquid模数过滤器为{{ 12 | modulo: 5 }}

(将12除以5,余数为2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接