Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在部署到Heroku后更改文件路径以访问views.py中的静态文件_Django_Heroku_Django Models_Django Views_Django Urls - Fatal编程技术网

Django 在部署到Heroku后更改文件路径以访问views.py中的静态文件

Django 在部署到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下载(请求、

我的应用程序是为提供ID
CNIC
的学生提供的,他们可以获得证书。
视图中的函数
下载
。py
需要

  • 访问图像(这是一个空白证书)
  • 通过添加与
    cnic
  • 另存为pdf
  • 可供下载
  • 所有这些都可以在
    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”)