【问题标题】:Django cannot find my media folder while debug = FalseDjango 在 debug = False 时找不到我的媒体文件夹
【发布时间】:2018-06-05 15:25:20
【问题描述】:

我有一个运行良好的 django 项目,当debug = True 时显示从管理员上传的所有媒体文件,但我立即将更改为debug = False django 找不到我的媒体文件夹,但它加载了我的静态文件夹。如您所见,我已经正确设置了MEDIA_ROOTMEDIA_URL

这也是我的urls.py 配置

在控制台日志中,我发现我的图像输出 404 错误,而我可以清楚地看到一个媒体文件夹存在我的目录中的图像

谁能帮我指出我做错了什么或者为什么 django 找不到我的媒体文件夹?

【问题讨论】:

  • 你能把代码写成文本吗?图片很难使用。
  • 这个问题不是参考的重复,因为我的问题是相反的。我的网站正在开发中,但是当debug = False 时找不到我在媒体文件夹中上传的图片
  • +static 仅用于调试/开发模式。我相信您可以通过设置 STATIC_URL 并进行 collectstatic 来修复它。但是我并没有靠近我的常规工作空间来确定这一点。如果你不明白,我稍后再看。
  • 我已经做了 collectstatic 并加载了正常的 css 和图像,但没有找到媒体文件夹中上传的图像

标签: python django python-3.x python-2.7 sorl-thumbnail


【解决方案1】:

Django 不会在生产模式下处理静态文件,您需要调用 ./manage.py collectstatic 并将收集到的静态文件提供给您的 django 应用前端的 Web 服务器。

或者使用--insecure 选项运行你的开发服务器。 https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#cmdoption-runserver-insecure

【讨论】:

    【解决方案2】:

    您可以查看此答案Media files not showing on Debug False ("您看到的行为是设计使然,Django 不在生产模式下提供静态文件。使用 Python 提供许多潜在的巨大静态文件会给服务器,而任何普通服务器都可以轻松处理。”)

    否则,如果我是对的,那么您希望将您的网站托管在服务器上。 一旦将 debug = True 设置为 False,Django 就不再自己处理静态文件。现在,它是处理静态文件的服务器。当我将我的 django 项目上传到 pythonanywhere 时,我遇到了这个问题。为了解决这个问题,你必须明确告诉服务器你的静态文件所在的位置:

    【讨论】:

    • 最好不要单独发布链接 - 而是在您的答案中包含链接中的基本信息。
    【解决方案3】:

    问题是你还没有准备好部署你的网站,如果不是这样,你应该先找到一种方法来服务器你的网站,而不是简单地运行 manage.py runserver,这不切实际。

    部署 django 网站的一个好方法是使用 Apache2 和 mod_wsgi,在这种情况下,您需要使用 apache 服务器的 httpd.conf 文件进行一些配置,而 apache2 将负责提供文件(静态、媒体)。

    httpd.conf 看起来像这样,还要确保检查 django 文档。

    serving-uploaded-files-in-development

    serving-file-in-production

    Alias /robots.txt /path/to/mysite.com/static/robots.txt
    Alias /favicon.ico /path/to/mysite.com/static/favicon.ico
    
    Alias /media/ /path/to/mysite.com/media/
    Alias /static/ /path/to/mysite.com/static/
    
    <Directory /path/to/mysite.com/static>
    Require all granted
    </Directory>
    
    <Directory /path/to/mysite.com/media>
    Require all granted
    </Directory>
    
    WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
    
    <Directory /path/to/mysite.com/mysite>
    <Files wsgi.py>
    Require all granted
    </Files>
    </Directory>
    

    如果您还没有准备好部署您的网站,则不应将 debug 设置为 false。

    【讨论】:

      【解决方案4】:

      注意所有页面都需要包含:

      {% load static %}
      

      您必须配置 Apache 以提供媒体文件。

      您不应该将 collectstatic 用于您的媒体目录。从 STATICFILES_DIRS 中删除 '/home/admin/webapps/mainfolder/mainapp/media',然后设置

      MEDIA_ROOT = '/home/admin/webapps/mainfolder/mainapp/media'
      

      完成此操作后,静态(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 应该在DEBUG = True 时提供媒体文件。

      对于DEBUG = False

      【讨论】:

      • 感谢您的回复,媒体文件在debug = True 时已加载,但当我将其转为false 时,找不到图像。换句话说,在开发中它可以工作,但在生产中它不会加载图像
      猜你喜欢
      • 1970-01-01
      • 2019-09-14
      • 2019-01-05
      • 2020-04-12
      • 2017-07-19
      • 2020-09-28
      • 2020-02-15
      • 2021-09-23
      • 2018-06-05
      相关资源
      最近更新 更多