【问题标题】:Django Global Static Files Not Found找不到 Django 全局静态文件
【发布时间】:2020-05-24 12:04:14
【问题描述】:

我正在尝试为我的项目创建/使用全局 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 中的链接 href 更改为 {% static 'App/css/test.css %},一切都会按预期工作。

我添加了一个 STATIC_ROOT 映射到的位置并运行 python manage.py collectstatic 无济于事。

我假设我在文档中忽略了一些愚蠢的东西,但我基本上跟着 this video 到了一个 T 并且我没有导入全局文件。

我已将所有相关文件添加到 GitHub https://github.com/JVP3122/django_help,这样我就不仅仅是展示了一点代码。此外,这不是我项目的官方仓库,因此 django 机密是否可见并不重要。

【问题讨论】:

    标签: html css django django-staticfiles static-files


    【解决方案1】:

    它应该是 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' %}

    【讨论】:

    • 谢谢你,但不幸的是,这并不能解决这个问题。我更新了原始问题以反映这一点。
    • 为什么是'abcdefg'?它应该设置为 STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
    • 我没有将它设置为静态,因为当我运行 collectstatic 时,它会提示我覆盖已经存在的文件。无论如何,将其更改为 os.path.join(BASE_DIR, 'static/') 似乎也不起作用。
    • 收集文件后的静态根文件夹是什么样的? global.css 有吗?
    • 感谢您一直支持我。只是说拧它会很容易。非常感谢您的帮助。
    猜你喜欢
    • 2021-08-27
    • 2014-11-10
    • 2011-08-26
    • 2020-06-22
    • 2021-08-16
    • 2020-06-20
    • 2019-06-24
    相关资源
    最近更新 更多