#python #django #forms
#python #django #формы
Вопрос:
У меня есть файл, привязанный к форме следующим образом: (forms.py ) класс UploadFileForm(forms.Form): wbfile = формы.FileField(label=’Загрузить рабочую книгу’, help_text =’Пожалуйста, убедитесь, что файл находится в формате .xlsx’)
Теперь я могу получить доступ к этому в функции просмотра с помощью запроса.FILES[‘wbfile’] . Но я хочу отправить этот файл в шаблон, а затем в другую функцию просмотра. Итак, я привязал его к форме, подобной этой:
f = form.fields['wbfile']
Теперь я хочу сохранить этот файл на диске, но как мне получить доступ к этому файлу, вот что я пытаюсь:
f = form.fields['file'].value()
with open(/tmp/xyz) as destination:
contents = f.read()
destination.write(contents)
Но это выдает сообщение об ошибке: объект ‘FileField’ не имеет атрибута ‘value’.
Это то, что показывает for.fields[wbfile]:
<django.forms.fields.FileField object at 0x7f91ff1c49d0>
Следовательно, файл определенно привязан к форме.
Пожалуйста, помогите и простите меня, если сомнения слишком очевидны, я новичок!
Комментарии:
1. Я не понял, что вы хотите?. У вас есть два представления: одно для просмотра файла, а другое — для доступа к файлу. Это правильно?
2. Я хочу передать файл из шаблона в представление, а затем в другой шаблон, а затем в другое представление, если это имеет смысл!
Ответ №1:
Я думаю, что в документации Django есть все, что вам нужно.
Для FileField : https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield
Попробуйте использовать YourFileField.storage и YourFileField .путь для доступа к файлу.
Затем с помощью этого документа: https://docs.djangoproject.com/en/dev/ref/files/storage /
Вы можете использовать open, чтобы открыть свой файл в памяти. Я думаю, это может дать такой код :
storage, path = YourFileField.storage, YourFileField.path
File f = storage.open(path)
Я не совсем понимаю, что вы хотите делать дальше, но если вы хотите сохранить файл в другом месте, я думаю, вы, вероятно, можете использовать :
f.save(path) #or something similar, haven't tested any code like this
Комментарии:
1. Это то, что я пытаюсь:
2. Это то, что я пытаюсь: у меня есть опция просмотра файла и кнопка «Далее» (которая имеет тип отправки). При нажатии на это становятся видны 2 опции: проверка и загрузка файла. Обзор-> Далее-> Проверка-> Загрузка. Теперь, когда файл загружается с помощью опции просмотра, управление переключается на представление, а после рендеринга управление переключается на шаблон. Теперь это происходит рекурсивно, я хочу сохранять файл в каждой транзакции. (Я использую случайные имена файлов здесь). Надеюсь, я ясно выразился!
3. Единственным решением, которое я вижу, было бы использование файла cookie, хранящего файл. Я не понимаю, почему вы должны перемещать свой файл из шаблона в представление (здесь ничего особенного), затем из представления в шаблон (почему бы и нет, для целей отображения, я полагаю), но тогда зачем снова просматривать? Кроме того, почему вы не сохраняете свой файл в базе данных?
4. Я изучу файлы cookie и предлагаемый способ, большое спасибо. Причина, по которой я столкнулся с этим беспорядком, заключалась в том, чтобы не загромождать сервер без необходимости. Я думаю, что дизайн ошибочен и начнется с новой стратегии.