Django:打开PDF文件对象

时间:2019-09-26 11:48:41

标签: python django

在我的Django应用中,我试图打开并显示未加载到模型中但找不到合适方法的pdf文件。

我有一组手动复制到media/my_folder的PDF发票(我使用Dropbox作为媒体宿主来做到这一点)。

然后我想在要求时显示每张发票。

文件对象选项

调查了几篇文章之后,我认为实现此目标的方法是动态创建文件对象。

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,我想我没有正确设置媒体文件的路径。

  

异常类型:/ catalog / perfilfactura / FA B中的FileNotFoundError   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 :(得分:0)

似乎没有任何理由打开文件或创建File对象。如果您的文件位于媒体目录中,则需要创建一个URL来添加媒体根目录:

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

现在将invoice_path直接传递到模板并在那里进行访问。