Django:无法从 DigitalOcean Droplet 上的模板加载静态文件
Posted
技术标签:
【中文标题】Django:无法从 DigitalOcean Droplet 上的模板加载静态文件【英文标题】:Django: can't load static files from template on DigitalOcean Droplet 【发布时间】:2015-07-31 22:04:32 【问题描述】:我在 DigitalOcean 机器上运行的 Django 应用中从模板加载静态文件时遇到问题。
这是我的 nginx 配置文件(etc/nginx/sites-available/django):
# your Django project's static files - amend as required
location /static
alias /home/workspace/app-toscana/django/djangoapptoscana/djangoapptoscana/static;
这是我的 settings.py 文件:
STATIC_PATH = os.path.join(BASE_DIR,'static')
STATIC_URL = '/static/' # You may find this is already defined as such.
STATICFILES_DIRS = (
STATIC_PATH, )
这是一个模板文件调用的例子:
% load staticfiles %
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AdminLTE 2 | Dashboard</title>
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<!-- Bootstrap 3.3.4 -->
<link href="% static 'bootstrap/css/bootstrap.min.css' %" rel="stylesheet" type="text/css" />
我尝试了不同的解决方案,尤其是更改了 settings.py 文件,但没有任何结果。 也许在我找不到的 Nginx 和 gunicorn 配置中存在任何问题。
【问题讨论】:
尝试找出错误所在的配置部分。在模板文件中创建的链接是否符合您的预期?将文件放在/home/workspace/app-toscana/django/djangoapptoscana/djangoapptoscana/static
中(如果还没有,请尝试在/static/myfile.txt
访问它。检查Nginx 日志的内容。重新阅读static files deployment docs。特别是,您似乎没有已设置STATIC_ROOT
或运行collectstatic
。祝你好运:)
设置了 STATIC_ROOT。使用命令python manage.py runserver localhost:9000
手动运行服务器我在服务器外壳上看不到任何特定问题,但是如果我尝试使用公共 IP 服务器地址访问该页面,我无法加载收到 404 错误的静态文件(在静态文件上)。例如。 GET http://188.166.72.87/static/bootstrap/css/bootstrap.min.css => STATUS 404
我也执行了collecstatic
命令,没有任何结果。
runserver
和 nginx 太不一样了。 STATIC_ROOT
是如何定义的,您的问题中没有这样的代码。另外,请尝试从您的实时设置中删除STATICFILES_DIRS
,看看效果如何,然后我会解释。
这是我的静态文件配置(来自 settings.py)STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder' ) STATIC_ROOT = '/home/workspace/app-toscana/django/djangoapptoscana/static/' STATIC_URL = '/static/'
没有 STATIC_PATH
和 STATIC_DIR
变量。
【参考方案1】:
希望我找到了解决此问题的方法。这是一个许可问题。在我的 DigitalOcean 机器上,我将 django 应用程序目录的所有者设置为 root:root
chown -R root:root /home/django/djangoapptoscana/dashboard
以及静态文件目录的所有者为 django:django
chown -R django:django /home/django/djangoapptoscana/djangoapptoscana/static
【讨论】:
以上是关于Django:无法从 DigitalOcean Droplet 上的模板加载静态文件的主要内容,如果未能解决你的问题,请参考以下文章
ERR_TOO_MANY_REDIRECTS 当我去域:Nginx,Daphne,Django,DigitalOcean
使用 nginx gunicorn 在 digitalocean 上部署 django react