没有在 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 上提供静态文件?
如何在 Docker 上使用 Nginx 和 Django 提供静态文件?