Django在DEBUG=True时不为每个静态文件提供服务 更新

Django在DEBUG=True时不为每个静态文件提供服务 更新,django,Django,发现问题,原因不明 在Mac和PC上使用docker的代码运行良好,这真的很奇怪。但当我把代码上传到云服务器时,它得到了404个静态文件和200个其他文件 bootstrap.min.css 200 stylesheet (index) 119 KB 50 ms dataTables.bootstrap.min.css 404 stylesheet (index) 126 B 164 ms buttons.bootstrap.min.css 404 stylesheet

发现问题,原因不明


在Mac和PC上使用docker的代码运行良好,这真的很奇怪。但当我把代码上传到云服务器时,它得到了404个静态文件和200个其他文件

bootstrap.min.css   200 stylesheet  (index) 119 KB  50 ms
dataTables.bootstrap.min.css    404 stylesheet  (index) 126 B   164 ms
buttons.bootstrap.min.css   404 stylesheet  (index) 126 B   165 ms
这是我的
设置。py

...

DEBUG = True # still on develop

...

STATIC_URL = '/static/'

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

...
可能是
模板
主机ip
有问题:

模板 我在
base.html
中添加了一些基本的css/js。 这个
bootstrap
css工作正常

<!DOCTYPE html>
<html lang="en">
  <head>
    {% block head_meta %}
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    {% endblock head_meta %}

    <title>{% block head_title %}{% endblock head_title %}</title>

    <!-- Bootstrap core CSS -->
    <link href="/static/vendors/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">

    {% block head_link %}
    <!-- HERE I PUT EXTENDED CSS/JS -->
    {% endblock head_link %}

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  ...
</html>
主机ip 我想,我的Mac、PC和云服务器之间唯一的变化是主机ip

在Mac和PC上,主机ip是
localhost

在云服务器上,主机ip是特定的ip,如
1.1.1.1

谢谢 Django版本:1.11


实际上,在我的PC和云服务器上,我都使用了带有ubuntu 16.04的docker。所以,在同一个环境中也有。我使用了
python3runserver 0.0.0.0:8000来测试/调试我的站点。但正如我的问题所描述的,他们得到了不同的结果

最后 对不起!我发现了我的问题,正如@Alasdair所说,这确实是一个
资本化问题。但不适用于Mac和PC/服务器。它发生在Windows和Ubuntu上相同的docker容器(Ubuntu 16.04)上。我找不到它,因为它可以在Windows上正常工作。我仍然不知道为什么


谢谢大家

您是否正在使用nginx为django应用程序反向代理?我想,静态文件的Http请求独立于django请求。如果您没有拆分两个不同的请求,例如:

location / {
    include uwsgi_params;

    uwsgi_pass 127.0.0.1:8000;  

    uwsgi_read_timeout  1200;
    uwsgi_send_timeout  300;
    proxy_read_timeout  300;
}

location /static {
 alias /some-path/your_project/collected_static; 
}

您对静态文件的请求将通过django,然后请求路径将与url.py中定义的url模式不匹配,最后得到404。

不要使用硬编码链接,而是在模板顶部键入
{%load static%}
,然后像这样调用给定的url:
href='{%static“css/your_file.css”%}'
另外,在服务器上部署项目时,可能需要查看
collectstatic
命令,它确实需要为settings.py中的静态文件添加一些额外的变量。这里有一个更详细的链接,请确保您有正确的资本化。如果目录是
datatables-1.10.15
,那么
datatables-1.10.15
可以在Mac上运行,但不能在Linux上运行。我仍然使用
runserver
进行测试,现在不使用任何web服务器。您在pc和服务器上执行的命令是什么?实际上,在我的PC和云服务器上,我都使用了带有ubuntu 16.04的docker。所以,在同一个环境中也有。我使用了
python3runserver 0.0.0.0:8000来测试/调试我的站点。但正如我的问题所描述的,他们得到了不同的结果。
location / {
    include uwsgi_params;

    uwsgi_pass 127.0.0.1:8000;  

    uwsgi_read_timeout  1200;
    uwsgi_send_timeout  300;
    proxy_read_timeout  300;
}

location /static {
 alias /some-path/your_project/collected_static; 
}