Jekyll/Liquid字符串比较毫无意义。

4
在一个简单的Jekyll网站中,我有一个菜单,看起来像这样:
<ul class="nav navbar-nav">
    <li {% if page.url=='/' %} class="active"{% endif %}><a href="/">Home</a></li>
    <li {% if page.url=='/page1.html' %} class="active"{% endif %}><a href="/page1.html">Page 1</a></li>
    <li {% if page.url=='/page2.html' %} class="active"{% endif %}><a href="/page2.html">Page 2</a></li>
    <li {% if page.url=='/page3.html' %} class="active"{% endif %}><a href="/page3.html">Page 3</a></li>
</ul>

当我在此块之前或之后输出page.url时,它总是包含预期值,即当前页面的路径,例如'/page2.html'。然而,始终将“活动”类分配给主页选项卡,这表明该字符串比较成功,并且page.url等于'/'。访问主页导致page.url包含'/index.html'而不是'/',这增加了神秘感。
我对Jekyll和Liquid很陌生,但我想不出这种行为的原因。我做错了什么?
2个回答

6

这似乎很疯狂,但液体引擎似乎需要在 == 周围添加空格。所以这样做应该可以:

<ul class="nav navbar-nav">
    <li {% if page.url == '/' %} class="active"{% endif %}><a href="/">Home</a></li>
    <li {% if page.url == '/page1.html' %} class="active"{% endif %}><a href="/page1.html">Page 1</a></li>
    <li {% if page.url == '/page2.html' %} class="active"{% endif %}><a href="/page2.html">Page 2</a></li>
    <li {% if page.url == '/page3.html' %} class="active"{% endif %}><a href="/page3.html">Page 3</a></li>
</ul>

我仍然不理解为什么第一个if返回true,但这应该可以解决你的直接问题。


2
疯狂的编程语言!人们每天都会遇到这个问题。感谢您的帮助。 - Peter Herdenborg
把我也算作这个问题的受害者吧! - Dan Gravell

1
您可以尝试这个:

{% for p in site.pages %}
  <li{% if p.url == page.url %} class="active"{% endif %}>
    <a href="{{ site.baseurl }}{{ p.url }}">{{ p.title }}</a>
  </li>
{% endfor %}

如果您想在菜单中对页面进行排序,可以查看使用Jekyll和Liquid进行排序导航菜单

谢谢David,看起来很有用,但是它并没有解释为什么我的当前方法不起作用。你有任何想法吗? - Peter Herdenborg

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