Нужно 2 значения для распаковки в цикле; получил 3, используя length_is - PullRequest
0 голосов
/ 10 мая 2018

После реструктуризации HTML-кода у меня возникла проблема с распаковкой.Иногда список menulayer имеет длину 3, иногда 2. Поэтому я добавил условие if {% if menulayer|length_is:"3" %}.Смотрите код ниже.Проблема в том, что я получаю сообщение об ошибке для линии {% for linkname,url in menulayer %}.Это не имеет смысла, потому что если есть 3 для распаковки, то эта часть оператора if не должна выполняться.Куда я иду не так?

   {% block navi %}
      {% for menulayer in navicontent %}
    <div id="navigation" class="span-24">
        <ul>
            {% if menulayer|length_is:"3"  %}
                    {% for linkname,url,active in menulayer %}
                        {% if not active %}
                        <li> <a href="{{url}}">{{linkname}}</a> </li>
                        {% else %}
                        <li> <a id="active" href="{{url}}">{{linkname}}</a> </li>
                        {% endif %}
                    {% endfor %}
            {% else %}
                        {% for linkname,url in menulayer %}
                            <li> <a href="{{url}}">{{linkname}}</a> </li>
                        {% endfor %}  
            {% endif %}
        </ul>

1 Ответ

0 голосов
/ 10 мая 2018

Вы по-прежнему можете распаковывать список и сохранять значения в переменных.
Пример:

test_list = [['val_1', 'val_2', 'val_3', 'val_4']]

"""
for a, b in test_list:  # raise "ValueError: too many values to unpack (expected 2)"
    print(a, b)
"""

for a, b, *_ in test_list:
    print(a, b)

Вывод:

val_1 val_2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...