没有在 Django 上提供静态文件

Posted

技术标签:

【中文标题】没有在 Django 上提供静态文件【英文标题】:Static files not being served on Django 【发布时间】:2017-01-27 18:37:57 【问题描述】:

我正在尝试以开发 (DEBUG=True) 模式在 Django 中提供静态文件。我有一个这样的目录结构:

my_project/
  ...
  static/
    img.png

在我的settings.py 我有这个:

STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILE_DIRS = [
    os.path.join(BASE_DIR, "static"),
]
STATIC_URL = '/static/'
STATICFILES_FINDERS = ( 
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

my_project/urls.py 我有这个:

from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin

urlpatterns = [
    # ...
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('app.landing.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

这一切似乎都是正确的。但是,当我访问 http://127.0.0.1:8000/static/img.png 时,我得到了 404。

我做错了什么?

【问题讨论】:

来自文档:在开发过程中,如果您使用 django.contrib.staticfiles,这将在 DEBUG 设置为 True 时由 runserver 自动完成(参见 django.contrib.staticfiles.views.serve() )。 是宁静的架构吗?我的意思是如果你有一个单独的前端应用程序在另一个端口上运行? 你用过nginx吗? 【参考方案1】:

您可以通过多种不同的方式对其进行调试。这是我的方法。

主要设置.py:

DEBUG = False
TDEBUG = True

urls.py:

from django.conf import settings
import os

if settings.TDEBUG:
    urlpatterns += patterns('',
        (r'^static/(?P<path>.*)$', 'django.views.static.serve',
         'document_root': os.path.join(os.path.dirname(__file__), 'static') ),
    )

【讨论】:

以上是关于没有在 Django 上提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 无法在数字海洋上提供 django 静态或媒体文件

使用 AWS S3 for django 在 heroku 上提供静态文件?

使用 Django 在 Heroku 上提供根级静态文件?

如何在 Docker 上使用 Nginx 和 Django 提供静态文件?

Heroku 上带有 gunicorn 服务器的 Django 项目不提供静态文件

Django:如何在生产中的apache服务器上部署静态文件