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)

Если вы хотите, чтобы содержимое вашего файла было объединено/разделено чем-то другим, нежели "", вы можете использовать другой разделитель, как указано в документации по объединению.

Вернуться на верх