Django: открыть объект в формате PDF - PullRequest
0 голосов
/ 26 сентября 2019

в моем приложении Django я пытаюсь открыть и показать файлы pdf, которые не были загружены в модель, но не могу найти подходящий путь.

У меня есть группа счетов-фактур в формате PDF, которые явручную скопировано в media/my_folder (я использую Dropbox в качестве медиа-хоста, чтобы сделать это).

Затем я хочу показать каждый счет-фактуру при запросе.

Параметр объекта файла

После изучения нескольких постов, я думаю, что способ сделать это - создать объект файла dinamycaly.

invoice_path = "my_folder/" + invoice_number + ".pdf"
f = open(invoice_path, 'w')
myfile = File(f)

Тогда я понимаю, что в шаблоне я могу получить доступ кфайл в том виде, в котором он был загружен в модель.

<p><a href="{{ myfile.url }}" target="_blank">Ver factura AFIP</a></p>7

Я получаю ошибку FileNotFoundError, я полагаю, что я неправильно устанавливаю путь к файлам мультимедиа.

Тип исключения: FileNotFoundError at / catalog / perfilfactura / FA B 0003-00000220 Значение исключения: [Errno 2] Нет такого файла или каталога: 'media / Facturas_Electronicas / FA-B-0003-00000220.pdf '

Это происходит при попытке open файла.Путь, который я установил, противоположен MEDIA_ROOT, просто добавьте подпапку «my_folder», а затем имя файла pdf.

Путь в параметре шаблона

Я также попытался установить путь непосредственно в шаблоне, как в:

<p><a href="media/{{ archivo_factura }}.pdf" download>Ver factura AFIP</a></p>

<p><a href="{{ MEDIA_URL }}Facturas_Electronicas/{{ archivo_factura }}.pdf" download>Ver factura AFIP</a></p>

В обоих случаях я получаю загруженные файлы в формате PDF.

Мои настройки

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

И мои настройки Dropbox:

DEFAULT_FILE_STORAGE = 'storages.backends.dropbox.DropBoxStorage'
DROPBOX_OAUTH2_TOKEN = 'my_token'
DROPBOX_ROOT_PATH = '/Kinemed APP/'

Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2019

Кажется, нет никакой причины открывать файл или создавать объект File.Если ваш файл находится в каталоге мультимедиа, все, что вам нужно для создания URL-адреса, это присоединиться к корню мультимедиа:

invoice_path = os.path.join(settings.MEDIA_ROOT, "my_folder/" + invoice_number + ".pdf")

, а теперь передать invoice_path непосредственно в шаблон и получить к нему доступ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...