【问题标题】:Django 2.2 staticfiles do not work in developmentDjango 2.2 静态文件在开发中不起作用
【发布时间】:2019-12-08 11:07:25
【问题描述】:

我正在制作一个新的 django 应用程序,用户可以在其中上传图像,然后它们可以显示在页面上。我已经阅读了 django 文档 10000 遍,但我仍然不明白为什么我的图像没有加载(DEBUG = True)

我所有的图像都将转到它们应该在的位置,并且在我的模型 django 的管理中具有通向图像的正确路径,但它无法正确加载。

我在 settings.py 中的设置:

STATIC_URL = '/static/'
STATIC_ROOT = 'static' # live cdn such as AWS S3

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


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

我的目录:

|- src
    |- myproject
        |- settings.py, views.py, urls.py etc
    |- myapp
        |- views.py urls.py models.py forms.py etc
    |- static (this folder is empty and appeared after running collectstatic
    |- templates
    |- db.sqlite3
    |- manage.py
|- static (this folder is OUTSIDE src)
    |- admin
        |- django admin stuff
    |- media
        |- img
            |- myimage.png

在 myapp 的 models.py 中 imagefield upload_to = 'img/'

正如我所说,图片不会加载到页面上,而是上传到 static/media/img/image_name.png

多年来我一直在尝试解决此问题,但我无法从任何人那里获得任何帮助,并且 django 文档和其他 stackoverflow 问题/答案也没有任何帮助。

感谢您的帮助!

【问题讨论】:

  • 您没有在 urls.py 中创建媒体网址
  • 什么?我怎么做?这在 django 文档中没有?!
  • 滚动到文档的中间。它就在那里
  • 就像我在第一条评论中所说的那样,您的 urls.py 中没有媒体网址。这已在文档中进行了解释。

标签: python django django-staticfiles django-deployment


【解决方案1】:

在开发过程中提供用户上传的文件¶

在开发过程中,您可以从 MEDIA_ROOT 使用 django.views.static.serve() 视图。

这不适合生产使用!对于一些常见的部署 策略,请参阅部署静态文件。

例如,如果您的 MEDIA_URL 定义为 /media/,您可以这样做 通过将以下 sn-p 添加到您的 urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

https://docs.djangoproject.com/en/2.2/howto/static-files/

【讨论】:

    【解决方案2】:

    STATICFILES_DIRS 表示 Django 将在哪里查找您的静态文件,这是您应该放置静态文件的位置,以便它们将在开发中提供服务并在您部署时由 collectstatic 收集。

    看起来您已将其设置为 src/static,所以这是您应该放置静态文件的位置。

    STATIC_ROOT 是您运行 collectstatic 后将收集静态资产的位置

    STATICFILES_FINDERS 默认会在STATICFILES_DIRS 和每个app/static 目录中查找

    典型的布局是这样的

    project_root/
        project_name/
            settings.py
            urls.py
            static/ < This is usually STATICFILES_DIRS
        app_1/
            models.py
            views.py
            static/ < AppDirectoriesFinder will look here
        app_2/
            models.py
            views.py
            static/ < AppDirectoriesFinder will look here
        static/ < This is where assest will be collected by collectstatic
    

    【讨论】:

      【解决方案3】:

      我有同样的问题,事实上,我没有在我的nginx.conf 中指定我的静态文件。

      如果它可以帮助你:有时我们忘记检查我们的基本配置:D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-01
        • 2019-12-10
        • 2012-01-14
        • 2016-08-20
        • 2012-08-16
        • 1970-01-01
        • 2019-10-24
        • 2020-09-12
        相关资源
        最近更新 更多