Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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中部署媒体文件?_Django_Heroku_Static_Media - Fatal编程技术网

如何在django heroku中部署媒体文件?

如何在django heroku中部署媒体文件?,django,heroku,static,media,Django,Heroku,Static,Media,我正在尝试在heroku上部署django应用程序。我目前正在使用该软件包作为标准设置。在我的模型下,一些使用ImageField上传的媒体文件,我希望它们显示在我的模板中。然而,尽管他们似乎指向了正确的目的地,但他们并没有得到服务 我在SO中查看了类似的问题,并查看了官方软件包git存储库以查找示例,但是我没有发现任何使用相同配置的示例 设置.py STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, "

我正在尝试在heroku上部署django应用程序。我目前正在使用该软件包作为标准设置。在我的模型下,一些使用ImageField上传的媒体文件,我希望它们显示在我的模板中。然而,尽管他们似乎指向了正确的目的地,但他们并没有得到服务

我在SO中查看了类似的问题,并查看了官方软件包git存储库以查找示例,但是我没有发现任何使用相同配置的示例

设置.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
] 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

.
.
.

django_heroku.settings(locals())
模板

{% extends 'base_site.html' %}
{% load i18n %}
{% block content_title %}{% trans 'Manage Product Detail' %}{% endblock%}
{% block content %}

<div class="card">  
  <div class="carousel-inner" role="listbox">
    {% for figure in product.figures.all %}        
        <div class="item{% if forloop.first %} active{% endif %}">                    
              <img src="{{ figure.image.url }}">
        </div>
    {%endfor%}
  </div>
  <div class="card-body">
    <h5 class="card-title">{{ product.name }}</h5>
    <p class="card-text">{{ product.description }}}
  </div>
  <div class="card-footer">
    <h5 class="card-title">{{ product.name }}</h5>
    <p class="card-text">{{ product.description }}}
  </div>
</div>


{% endblock %}

django heroku软件包不提供这种开箱即用的功能(由于heroku方面的限制,不可能实现媒体文件的无缝部署和开发)。在开发过程中,必须通过以下方式加载媒体文件:

urlpatterns = [
    ....
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

在生产环境中,静态文件(如上面提到的一些用户)必须从外部源提供服务。以下是我目前正在遵循的提示:

我只想进一步解释其他人所说的安德烈没有理解的话。在部署项目时,这些媒体文件不在其中—它们是在使用应用程序时添加的,并且仅在该期间可用。当dyno进入睡眠状态时,您的应用程序或多或少会重新部署(所有内容都会重新安装以供使用),并且与您第一次部署它的方式完全相同—没有媒体文件。

请按照以下步骤操作:

  • 将Cloudinary插件添加到Heroku应用程序

  • 单击cloudinary并安装它

  • 然后单击Cloudinary插件

  • 通过此仪表板,您将能够查看要连接的凭据

  • 然后转到您的项目:

  • 在终端中键入以下命令:
  • 在您的settings.py中,添加
  • 在模型中。py:

    十,

  • 现在,为了将此图像放入模板中,您可以 仅键入:

  • 可能重复我已经看到了这个答案,但在这种情况下,django heroku包没有被使用,我的目标是实现无缝部署和开发。我遇到的错误是在开发过程中(我假设在生产过程中也会发生同样的情况,我目前正在测试),这不能归因于dynos处于非活动状态。您不能将用户上传的文件存储在Heroku文件系统中。您必须使用外部存储,例如S3。可能我遗漏了什么,但我正在本地测试,并且文件正确地存储在媒体文件夹中。
    urlpatterns = [
        ....
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
    pip install django-cloudinary-storage
        
    pip install cloudinary
        
    pip install Pillow
    
    INSTALLED_APPS = [
           'django.contrib.staticfiles',   
           'cloudinary_storage',
           'cloudinary',
            ]
        
    CLOUDINARY_STORAGE = {
                 'CLOUD_NAME': 'your_cloud_name',
                 'API_KEY': 'your_api_key',
                 'API_SECRET': 'your_api_secret'
                }
        
    MEDIA_URL = '/media/'  # or any prefix you choose
         
    DEFAULT_FILE_STORAGE='cloudinary_storage.storage.MediaCloudinaryStorage'
    
    class TestModel(models.Model):
                 name = models.CharField(max_length=100)
                 image = models.ImageField(upload_to='images/', 
                 blank=True)
    
            <img src="{{ test_model_instance.image.url }}" alt="{{ 
            test_model_instance.image.name }}">
    
    ...
    cloudinary==1.17.0
    django-cloudinary-storage==0.2.3