Django продолжает заменять содержимое представления
У меня есть несколько текстовых файлов в папке, которые все созданы динамически из коммутаторов Cisco. Я хочу прочитать каждый файл и отобразить его в Интернете. Поэтому у меня есть следующий код:
def idf(request):
context = {}
all_files = os.listdir("devices/")
for i in all_files:
with open("i, 'r') as readFile:
switch_ports = readFile.readlines()
print(switch_ports)
readFile.close()
context.update({'switch_ports': switch_ports})
return render(request, 'idf.html', context)
Проблема в том, что он зацикливает функцию и отображает только последний файл. Таким образом, он по сути заменяет содержимое. Как я могу сохранить их все? Чтобы они просто продолжали добавляться к последнему файлу?
Вы переопределяете ключ в своем контексте на каждой итерации цикла, храните данные в списке (или в любом другом подходящем месте) и передаете этот список в свой контекст после цикла
def idf(request):
switch_ports = []
all_files = os.listdir("devices/")
for i in all_files:
with open(i, 'r') as readFile:
switch_ports.append(readFile.read())
return render(request, 'idf.html', {'switch_ports': switch_ports})
Используйте тег pre
для вывода результатов, так как в этом случае текст будет отформатирован моноширинным шрифтом и, скорее всего, будет выглядеть так, как вы хотите. Также используйте read()
вместо readlines()
, чтобы получить необработанный txt, а не список строк
{% for result in switch_ports %}
<pre>{{ result }}</pre>
{% endfor %}
context.update({"switch_ports": switch_ports})
заменит существующие "switch_ports" на любое значение последней итерации в это время, поэтому ваша проблема имеет смысл.
Моя рекомендация - использовать list append и затем join для достижения желаемого результата.
def idf(request):
context = {}
switch_ports = []
all_files = os.listdir("devices/")
for i in all_files:
with open(i, 'r') as readFile:
switch_port = readFile.readlines()
print(switch_port)
switch_ports.append(switch_port)
readFile.close()
context.update({'switch_ports': "".join(switch_ports)})
return render(request, 'idf.html', context)
Если вы хотите, чтобы содержимое вашего файла было объединено/разделено чем-то другим, нежели "", вы можете использовать другой разделитель, как указано в документации по объединению.