Django 在部署到Heroku后更改文件路径以访问views.py中的静态文件
我的应用程序是为提供IDDjango 在部署到Heroku后更改文件路径以访问views.py中的静态文件,django,heroku,django-models,django-views,django-urls,Django,Heroku,Django Models,Django Views,Django Urls,我的应用程序是为提供IDCNIC的学生提供的,他们可以获得证书。视图中的函数下载。py需要 访问图像(这是一个空白证书) 通过添加与cnic 另存为pdf 可供下载 所有这些都可以在localhost上开发,但部署到Heroku时,映像的文件路径不存在,这很有意义,因为应用程序不再是本地的,任何人都可以访问它 问题是,我们如何找到访问最初存储在certificates\static\certificates中的Certificate\u 0001.jpg的新路径 视图.py def下载(请求、
CNIC
的学生提供的,他们可以获得证书。视图中的函数下载
。py
需要
cnic
localhost
上开发,但部署到Heroku时,映像的文件路径不存在,这很有意义,因为应用程序不再是本地的,任何人都可以访问它
问题是,我们如何找到访问最初存储在certificates\static\certificates
中的Certificate\u 0001.jpg
的新路径
视图.py
def下载(请求、日期、名称):
x=日期。拆分(“”)
日期=f“29{x[3]}{x[4]}”
尝试:
image=image.open(“certificates\static\certificates\Certificate\u 0001.jpg”)
除:
返回HttpResponse(“图像未加载”)
font\u type=ImageFont.truetype('arial.ttf',70)
font\u type\u 2=ImageFont.truetype('arial.ttf',35)
draw=ImageDraw.draw(图像)
draw.text(xy=(600740),text=名称,fill=(0102,0),font=font\u类型)
draw.text(xy=(3301230),text=日期,fill=(0102,0),font=font\u type\u 2)
尝试:
image.save(f'certificates\static\certificates\{name}.pdf',“pdf”,分辨率=100.0)
除:
返回HttpResponse(“pdf未保存”)
尝试:
以pdf格式打开(f'certificates\static\certificates\{name}.pdf、'rb'):
response=HttpResponse(pdf.read(),content_type='application/pdf')
响应['Content-Disposition']=f'inline;filename=NFDP-{name}.pdf'
返回响应
除:
返回HttpResponse(“pdf未加载”)
设置.py
导入操作系统
进口django_heroku
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(u文件_u)))
中间件=[
'django.middleware.security.SecurityMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xFrameOptions中间件',
'whitenoise.middleware.WhiteNoiseMiddleware'
]
#静态文件(CSS、JavaScript、图像)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC\u ROOT=os.path.join(BASE\u DIR,“staticfiles”)
静态URL='/STATIC/'
django_heroku.settings(locals())
STATICFILES\u STORAGE='whitenoise.STORAGE.CompressedManifestStaticFilesStorage'
url.py
从django.url导入路径
从…起导入视图
app_name=“证书”
URL模式=[
路径(“,views.index,name=“index”),
路径(“下载//”,views.download,name=“下载”)
]
wsgi.py
导入操作系统
从django.core.wsgi导入获取\u wsgi\u应用程序
os.environ.setdefault('DJANGO\u SETTINGS\u MODULE','nfdp.SETTINGS')
application=get\u wsgi\u application()
我找到了解决方案。实际上,一旦将Django应用程序部署到Heroku,所有文件都将被放置在名为app
的新目录中。您还可以运行heroku运行bash
并执行cd-app
或通过cd..
返回一个文件夹,然后执行cd-app
。然后您可以在app\u name/static/app\u name/my\u file.xyz
中查看您的文件。因此,为了访问views.py
中的静态文件
,必须更改文件路径,使其在生产环境中运行
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(u文件_uu)))
##BASE_DIR=/app/正在生产(heroku),但您的项目名称正在开发(本地)
path=os.path.join(BASE_DIR,“certificates/static/certificates/Certificate_0001.jpg”)