Django不提供静态文件

时间:2016-08-24 01:14:07

标签: python django web static resources

我正在使用现有(以前功能齐全的)Django网站。我们最近从Django 1.8.13升级到1.10,我们的WSGI是Gunicorn。从我的开发机器托管时它可以正常工作,但是在部署时,所有静态资源(在管理员和主站点上)都会产生404消息Timestamp

我们的Directory indexes are not allowed here.包含以下内容:

settings.py

目录结构如下所示:

INSTALLED_APPS = (
    ...
    'django.contrib.staticfiles',
    ...
)

DEBUG = True
STATIC_URL = '/static/'
PROJECT_DIR = os.path.dirname(os.path.dirname(__file__))
STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'),
)
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static_resources')

2 个答案:

答案 0 :(得分:0)

尝试将os.path.join(PROJECT_DIR,' ../ static')更改为os.path.join(PROJECT_DIR,' static')和STATIC_ROOT = os.path .join(PROJECT_DIR,' ../ static_resources')到STATIC_ROOT = os.path.join(PROJECT_DIR,' static_resources')。它会解决你的问题。

答案 1 :(得分:0)

答案非常微妙。当我将Django升级到1.9并运行服务器时,它发出了以下警告:

?: (urls.W001) Your URL pattern '^static/(?P<path>.*)$' uses include with a regex ending with a '$'. Remove the dollar from the regex to avoid problems including URLs.

urls.py中,我的urlpatterns列表包含:

url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
    'document_root': settings.STATIC_ROOT,
}),

我把它改为:

url(r'^static/(?P<path>.*)/', 'django.views.static.serve', {
    'document_root': settings.STATIC_ROOT,
}),

这消除了警告但导致静态资源停止加载。 它必须是:

url(r'^static/(?P<path>.*)', 'django.views.static.serve', {
    'document_root': settings.STATIC_ROOT,
}),

为什么这对我的开发机器(Macbook)以及团队开发机器(Windows笔记本电脑)上的另一台机器起作用仍然是一个谜,但在我们的Linux服务器上却没有。但是,它现在有效,所以我试图弄清楚它。