我创建了一个简单的Jekyll页面(由GitHub Pages处理和托管),带有一个Liquid计数器变量,我循环访问一些数据并将其转储出来并计算具有给定属性的项目数 .
例如:
Complete Before: {{ complete }}
{% for book in books %}
Title: {{book.Title}}
{% if book.Completed == "true" %}
{% increment completed %}
{% endif %}
{% endfor %}
Complete After: {{ complete }}
现在我在两个不同的页面上有相同的代码块,但书中的数据在两种情况下都不同,但变量 completed
的值看起来像是在两个页面的处理中保存,这导致第一页看起来像
Complete Before:
Title: Foo
Title: Bar
Complete After: 2
和第二页看起来像
Complete Before: 2
Title: Baz
Complete After: 3
如何将完成的变量设置为每页唯一,而无需更改每个页面以使用不同的变量名称 .
2 回答
我建议在这种情况下使用
assign
并使用plus
过滤器增加变量 .increment
的行为与预期的略有不同,它不会修改常见的Jekyll变量值:更新
问题至少在于它的范围,这不是我自然期望的,这是一个简单的例子来展示它:
输出:
如果你看liquid::increment code,你可以看到它是如何工作的,上下文
myvar
和本地myvar
之间的界限在哪里 .请注意,上下文
myvar
将在所有页面,帖子中传递 . 这是一个"global"变量 .在第一页:
{% increment myvar %}
- > output : 0检索上下文
myvar
,如果是nil
则分配0将其存储在临时变量中
进行后期增量(
myvar++
)将值(1)存储在
myvar
上下文变量中打印临时变量(0)
{{ myvar }}
- > output : 1由于
myvar
未分配给局部变量, this liquid tag is using the fallback value of the context variable myvar 但不会对其进行修改 .在第二页:
{% assign myvar = 100 %}
将
100
分配给本地myvar
变量 .{% increment myvar %}
- >输出:1检索上下文
myvar
,即1将其存储在临时变量中
做后期增量(
myvar++
)将值(2)存储在
myvar
上下文变量中打印临时变量(1)
{{ myvar }}
- > output : 100当
myvar
被分配给局部变量时,请使用它 .结论
如果您需要本地计数器,请使用@marcanuy解决方案 .
如果您需要全局计数器,请使用
{% increment myvar %}
标记,并且不要依赖{{ myvar }}
来打印其值,因为您不确定是否已分配/声明本地myvar
.