Итерационный JSON-файл данных в Jekyll дает двойной вывод - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь построить сайт документации с Jekyll и подумал, что было бы неплохо сохранить основные ссылки в файле данных JSON.

Вот файл JSON:

{
    "home": {
        "name": "Home",
        "path": "/",
        "icon": "fas fa-home"
    },
    "faq": {
        "name": "FAQ",
        "path": "/faq",
        "icon": "fas fa-question"
    },
    "manuals": {
        "name": "Anleitungen",
        "path": "/manuals",
        "icon": "fas fa-book-open"
    }
}

Вот мой шаблон (часть его):

        <div class="navbar-menu">
            <div class="navbar-start">
                {% for rubrik in site.data.navigation %}
                {% for part in rubrik %}
                <a class="navbar-item{% if page.url == part.path %} is-active{% endif %}" href="{{ part.path }}">
                    <span class="icon"><i class="{{ part.icon }}"></i></span><span>{{ part.name }}</span>
                </a>
                {% endfor %}
                {% endfor %}
            </div>
        </div>

Это фактически производит этот вывод:

       <div class="navbar-menu">
            <div class="navbar-start">


                <a class="navbar-item" href="">
                    <span class="icon"><i class=""></i></span><span></span>
                </a>

                <a class="navbar-item is-active" href="/">
                    <span class="icon"><i class="fas fa-home"></i></span><span>Home</span>
                </a>



                <a class="navbar-item" href="">
                    <span class="icon"><i class=""></i></span><span></span>
                </a>

                <a class="navbar-item" href="/faq">
                    <span class="icon"><i class="fas fa-question"></i></span><span>FAQ</span>
                </a>



                <a class="navbar-item" href="">
                    <span class="icon"><i class=""></i></span><span></span>
                </a>

                <a class="navbar-item" href="/manuals">
                    <span class="icon"><i class="fas fa-book-open"></i></span><span>Anleitungen</span>
                </a>


            </div>
        </div>

Вы видите, что выход удваивается, один раз с пустыми переменными внешнего цикла, во-вторыхс правильными значениями из внутреннего цикла.

Есть подсказки?Это ошибка или я просто неправильно ее использую?Не видел ни одного совета, что цикл for предназначен только для одного уровня.Jinja2, например, может сделать это.Моя используемая версия Jekyll - 4.0 (самая новая).

Заранее большое спасибо.

С уважением, Томас

1 Ответ

0 голосов
/ 30 сентября 2019

Когда вы вводите цикл site.data.navigation, цикл возвращает массив типа ["home", {"name"=>"Home", "path"=>"/", "icon"=>"fas fa-home"}].

Если вы попробуете этот код, вы непременно поймете, что происходит.

{% for rubrik in site.data.navigation %}
  <p>rubrik = {{ rubrik | inspect }}</p>
  <ul>
  {% for part in rubrik %}
    <li>part = rubrik[{{ forloop.index0 }}] = {{ part | inspect }}</li>
  {% endfor %}
  </ul>
{% endfor %}

ВВ вашем случае вы можете просто нацелить элемент rubrik[1] следующим образом:

<div class="navbar-menu">
  <div class="navbar-start">
    {% for rubrik in site.data.navigation %}
    {% assign p = rubrik[1] %}
    <a class="navbar-item{% if page.url == p.path %} is-active{% endif %}" href="{{ p.path }}">
      <span class="icon"><i class="{{ p.icon }}"></i></span><span>{{ p.name }}</span>
    </a>
    {% endfor %}
  </div>
</div>
...