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;
}