Как удалить элементы из списка в Flask / jinja2 l oop? - PullRequest
0 голосов
/ 31 января 2020

В настоящее время я делаю проект flask, в котором я хочу отобразить четыре Bootstrap столбца в строке. Чтобы сделать это, я подумал, что я мог бы просто сделать так:

my_list = ["a","b","c","d","e","f","g","h","i","k",
       "l","m","n","o","p","q","r","s","t","u",
       "v","w","x","y","z"]

for i in range(len(my_list)):
    for i in my_list[:4]:
        print(i)
        my_list.remove(i)

# returns every element of my_list in order

Однако, когда я попытался сделать это в реальном проекте, я получил ошибку, независимо от того, куда я положил

{% number_of_texts.remove [j]%}: "jinja2.exceptions.TemplateSyntaxError : Обнаружен неизвестный тег 'number_of_texts'. Джинджа искал следующие теги: 'endfor' или 'else'. Самый внутренний блок, который нужно закрыть, это 'for'. "

Это мои переменные из main.py:

@app.route('/texts')
def texts():
number_of_texts = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
return render_template('texts.html', title="All texts", number_of_texts=number_of_texts, len=len(number_of_texts))

Это мой код из text.py:

{% for i in range(len) %}
<div class="row"> 
    {% for j in number_of_texts[:4] %}
        <div class="col m-1"> 
            <div class="card" style="width: 15rem; height: 28rem; border-radius: 25px 25px 0px 0px">
                <img src="static\img\p_01.jpg" class="card-img-top" alt="..." style="object-fit: cover; border-radius: 25px 25px 0px 0px">
                <div class="card-body">
                    <h5 class="card-title">row: {{ i }}</h5>
                    <p class="card-text">column: {{ j }}</p>
                    <a href="{{ url_for('specific_text', text_no=1) }}" class="btn btn-dark">Button</a>
                </div>
            </div>
        </div>
    {% endfor %}{% number_of_texts.remove[j] %}
</div>
{% endfor %}

Если я не удаляю j из списка number_of_texts, то кроме получения слишком большого количества столбцов, конечно, я получаю макет, который мне действительно нужен. Вот как это выглядит: https://imgur.com/a/t6tIic4

Есть ли другой способ удалить эти элементы из list, чтобы я отображал каждый элемент в списке только один раз?

С уважением

1 Ответ

2 голосов
/ 31 января 2020

Если ваш фактический вариант использования состоит в том, чтобы разбить вещи на строки, вам просто потребуется фильтр batch .

{% for row in things|batch(4) %}
  <div class="row">
     {% for item in row if item %}
        <div class="item">
           {{ item }}
        </div>
     {% endfor %}
  </div>
{% endfor %}

См. Вышеупомянутую документацию по fill_with= параметр тоже; Приведенное выше просто оставит в последней строке меньше элементов, если длина things не делится на 4 благодаря if item.

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