Передать два значения в For Loop Python

#python #html #for-loop #terminal #flask

#python #HTML #for-цикл #терминал #flask

Вопрос:

У меня есть два файла Python и один HTML-файл. Один из файлов Python использует Flask для соединения с файлом HTML.

В file1.py (не Flask) Я установил цикл for для печати переменной volume

    for volume in current_volumes:
    print volume
  

который выводит две строки в терминале

  Volume:vol-XXXXXXX
 Volume:vol-YYYYYYY
  

Теперь я помещаю from file1 import * поверх file2.py .
Кроме того, file2.py содержит

def template(name=volume):
return render_template('index.html', name=name)

Index.html содержит <p>{{ name }}</p>

но считывается только Volume:vol-YYYYYYY при запуске.

Как мне заставить его распечатать оба значения volume ?

Комментарии:

1. Если current_volumes содержит / создает более одного элемента, этот цикл напечатает их все. Возможно, current_volumes в цикле есть только один элемент. Возможно, вы опубликовали недостаточно информации, чтобы кто-то мог вам помочь.

2. current_volumes = conn.get_all_volumes() если я просто print current_volumes это верну [Volume:vol-e2c979e3, Volume:vol-80942781] [] [] , и если я установлю, def template(name=current_volumes): это вернет [] . Может быть, Flask имеет тенденцию использовать последнюю часть списка (т.Е. [] и объем-ГГГГГГ)?

Ответ №1:

Я думаю, вы хотите использовать цикл for для создания новой строки:

 volume_string = ""
for volume in current_volumes:
     volume_string  = volume

def template(name=volume_string):
     ...
  

Вы можете вставить » n» (перевод строки) в конце каждого добавляемого тома, чтобы он отображался в 2 строках печати.

Я не играл с Flask, но вы также можете просто попробовать

 def template(name=current_volumes):
  

Возможно, это достаточно умно, чтобы заставить это работать.

Комментарии:

1. Я получил эту ошибку TypeError: cannot concatenate 'str' and 'Volume' objects

2. current_volumes — это список объектов Volume? Не список строк? Как работает печать? Вы определили в нем str ?

3. Извлечение списка всех томов из AWS: current_volumes = conn.get_all_volumes()

4. Также def template(name=current_volumes): не работает. Пробовал это раньше, и он выдает []

5. Попробуйте volume_string = str(объем)

Ответ №2:

Вы используете экранирующую for переменную volume , а не список томов ( current_volumes ). (Если вы переключитесь на Python 3, это вызовет ReferenceError вместо работы). Изменить:

 def template(name=volume):
    return render_template('index.html', name=name)
  

Для:

 def template(name=current_volumes):
    return render_template('index.html', name=name)
  

Вы также захотите изменить свой {{ name }} на цикл — давайте продолжим и изменим название:

 def template(volumes=current_volumes):
    return render_template('index.html', volumes=volumes)
  

а затем добавьте цикл в наш шаблон Jinja:

 {% for volume in volumes %}
    <p>Volume Data: {{ volume }}</p>
{% endfor %}
  

Комментарии:

1. Это просто ничего не выводит в HTML. Я не понимаю, почему.

2. Судя по звуку, это current_volumes перезаписывается где-то между тем, где вы используете его для определения значения по умолчанию для template и когда вы на самом деле вызываете template . Либо это, либо это действительно странный итератор (поскольку другой ответ работает для вас, мы знаем, что это не одноразовый итератор).