在我的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/'
谢谢!
答案 0 :(得分:0)
似乎没有任何理由打开文件或创建File对象。如果您的文件位于媒体目录中,则需要创建一个URL来添加媒体根目录:
invoice_path = os.path.join(settings.MEDIA_ROOT, "my_folder/" + invoice_number + ".pdf")
现在将invoice_path
直接传递到模板并在那里进行访问。