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

时间:2015-10-06 11:06:38

标签: jekyll liquid

在一个简单的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'。但是,它始终是Home选项卡,它接收'active'类,表明 字符串比较成功,page.url等于'/'。访问主页导致page.url包含'/index.html'而不是'/'的事实增加了这个谜团。

我是Jekyll和Liquid的新手,但我想不出这种行为的原因。我做错了什么?

2 个答案:

答案 0 :(得分: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,但这应该可以解决您的问题。

答案 1 :(得分: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 %}

如果您想在菜单中订购页面,可以查看 Sorted navigation menu with Jekyll and Liquid