#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 . Либо это, либо это действительно странный итератор (поскольку другой ответ работает для вас, мы знаем, что это не одноразовый итератор).