找不到 Django 全局静态文件
Django Global Static Files Not Found
我正在尝试为我的项目 create/use 全局 css 文件,它似乎正在解析到正确的位置,但仍然找不到文件。
我的 settings.py 文件的相关部分是:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'abcdefg')
STATIC_URL = '/static/'
STATICFILES_DIR = [
os.path.join(BASE_DIR, 'static')
]
我安装的应用程序中有 django.contrib.staticfiles
。
我的文件结构是:
Project/
├── abcdefg/
│ ├── admin/
│ ├── App/
├── Project/
│ ├── __init__.py
│ ├── settings/
│ ├── urls.py
│ └── wsgi.py
├── App/
│ └── static
│ └── App
│ └── css
│ └── test.css
│ └── __init__.py
│ └── admin.py
│ └── apps.py
│ └── models.py
│ └── views.py
│
├── manage.py
│
├── static/
│ └── base
| └── css
| └── test.css
└── templates/
└── base.html
我的 base.html 看起来像这样:
{% load static %}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="{% static 'base/css/global.css' %}">
<title>Title {% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}
<h1>Test</h1>
{% endblock %}
</body>
</html>
当我尝试访问该页面时出现以下错误:
[08/Feb/2020 11:26:50] "GET /static/base/css/test.css HTTP/1.1" 404 1683
这表明它指向正确的位置,但实际上并没有抓取文件。如果我将 base.html 中的 link href 更改为 {% static 'App/css/test.css %}
,一切都会按预期进行。
我添加了一个 STATIC_ROOT 映射到的位置并且 运行 python manage.py collectstatic 无济于事。
我假设我在文档中忽略了一些愚蠢的东西,但我基本上是按照 this video 到 T 并且我没有导入全局文件。
我已将所有相关文件添加到 https://github.com/JVP3122/django_help 的 GitHub,这样我就不只是显示一点代码了。另外,这不是我项目的官方回购,所以 django 秘密是否可见并不重要。
应该是STATICFILES_DIRS而不是STATICFILES_DIR。此外,最好将 STATIC_ROOT 设置为不同的文件夹,这样它就不会覆盖全局静态文件。您需要在主项目目录中创建一个名为 'static_files' 的文件夹,并更改以下两行:
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
STATICFILES_DIRS = [
('global', os.path.join(BASE_DIR, 'static')),
]
然后您将能够在以下位置加载全局文件:{% static 'global/base/css/test.css' %}
我正在尝试为我的项目 create/use 全局 css 文件,它似乎正在解析到正确的位置,但仍然找不到文件。
我的 settings.py 文件的相关部分是:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'abcdefg')
STATIC_URL = '/static/'
STATICFILES_DIR = [
os.path.join(BASE_DIR, 'static')
]
我安装的应用程序中有 django.contrib.staticfiles
。
我的文件结构是:
Project/
├── abcdefg/
│ ├── admin/
│ ├── App/
├── Project/
│ ├── __init__.py
│ ├── settings/
│ ├── urls.py
│ └── wsgi.py
├── App/
│ └── static
│ └── App
│ └── css
│ └── test.css
│ └── __init__.py
│ └── admin.py
│ └── apps.py
│ └── models.py
│ └── views.py
│
├── manage.py
│
├── static/
│ └── base
| └── css
| └── test.css
└── templates/
└── base.html
我的 base.html 看起来像这样:
{% load static %}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="{% static 'base/css/global.css' %}">
<title>Title {% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}
<h1>Test</h1>
{% endblock %}
</body>
</html>
当我尝试访问该页面时出现以下错误:
[08/Feb/2020 11:26:50] "GET /static/base/css/test.css HTTP/1.1" 404 1683
这表明它指向正确的位置,但实际上并没有抓取文件。如果我将 base.html 中的 link href 更改为 {% static 'App/css/test.css %}
,一切都会按预期进行。
我添加了一个 STATIC_ROOT 映射到的位置并且 运行 python manage.py collectstatic 无济于事。
我假设我在文档中忽略了一些愚蠢的东西,但我基本上是按照 this video 到 T 并且我没有导入全局文件。
我已将所有相关文件添加到 https://github.com/JVP3122/django_help 的 GitHub,这样我就不只是显示一点代码了。另外,这不是我项目的官方回购,所以 django 秘密是否可见并不重要。
应该是STATICFILES_DIRS而不是STATICFILES_DIR。此外,最好将 STATIC_ROOT 设置为不同的文件夹,这样它就不会覆盖全局静态文件。您需要在主项目目录中创建一个名为 'static_files' 的文件夹,并更改以下两行:
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
STATICFILES_DIRS = [
('global', os.path.join(BASE_DIR, 'static')),
]
然后您将能够在以下位置加载全局文件:{% static 'global/base/css/test.css' %}