Jekyll/Liquid 字符串比较没有意义
Jekyll/Liquid string comparisons make no sense
在一个简单的 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'。但是,接收 'active' class 的始终是主页选项卡,表明 that 字符串比较成功并且 page.url
等于 '/' .访问主页导致 page.url
包含“/index.html”而不是“/”这一事实增加了谜团。
我是 Jekyll 和 Liquid 的新手,但我想不出这种行为的原因。我做错了什么?
你可以试试这个:
{% 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
这看起来很疯狂,但液体引擎似乎需要 ==
周围的空间。所以这应该有效:
<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
returns true
但这应该可以解决您眼前的问题。
在一个简单的 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'。但是,接收 'active' class 的始终是主页选项卡,表明 that 字符串比较成功并且 page.url
等于 '/' .访问主页导致 page.url
包含“/index.html”而不是“/”这一事实增加了谜团。
我是 Jekyll 和 Liquid 的新手,但我想不出这种行为的原因。我做错了什么?
你可以试试这个:
{% 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
这看起来很疯狂,但液体引擎似乎需要 ==
周围的空间。所以这应该有效:
<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
returns true
但这应该可以解决您眼前的问题。