【问题标题】:Django: can't load CSS files that are in /staticDjango:无法加载 /static 中的 CSS 文件
【发布时间】:2019-04-16 13:41:00
【问题描述】:

自从我完成了 Django 网站的后端后,我开始添加一些样式。 我的 html 文件已显示,但似乎没有 css 链接到它们但是当我在 Firefox 中显示源代码时路径是正确的。

mywebsite/
----blog/
----mywebsite/
----static/
--------css/
------------struct.css
----templates/
--------layouts/
--------errors/
------------404.html
--------html/
------------struct.html

Django 版本:2.1.7

settings.py:

DEBUG = False
ALLOWED_HOSTS = ['*']

INSTALLED_APPS = [
    # other apps...
    'django.contrib.staticfiles',
]

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

urls.py:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

struct.html:

{% load static %}

<!DOCTYPE html>
<html lang="en" dir="ltr">

  <head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width; initial-scale=1.0;">

    <link rel="stylesheet" href="{% static 'css/struct.css' %}">

    <title>test</title>

  </head>

  <body>

    <p>test</p>


  </body>

</html>

struct.css:

p{
    color:red:
}
body{
    background-color:black:
}

【问题讨论】:

  • 你能把settings.py的整个路径打印出来吗? print(os.path.join(BASE_DIR, "static"))
  • /home/user/RedPillers/red_pillers/static
  • red_pilers 是我的项目
  • 这听起来很傻,但是您是否尝试过设置 DEBUG=True (本地)当然。因为你还没有设置 STATIC_ROOT 并且你没有运行 collectstatic 可能就是这样。如果是,那么您需要遵循文档。
  • 刚刚看到您对以下答案的评论。当您开发 (DEBUG=True) 时,您所做的工作。但是,当您打开 DEBUG=False 时,您需要设置 STATIC_ROOT 作为文档所说的docs.djangoproject.com/en/2.2/howto/static-files/#deployment

标签: css django static


【解决方案1】:

一般静态文件路径应该是这样的 appname/static/appname/yourfiles 无需更改 url 模式。

假设你的 appname 是 Myapp ,你的 css 文件的正确路径是

Myapp/static/Myapp/css/struct.css

要包含静态文件,请在 settings.py 中添加以下行

STATIC_URL = '/static/'

在你的html模板中

<!doctype html>
{% load static %}
<link rel="stylesheet" href="{% static 'Myapp/css/struct.css' %}">

如果您在应用程序中拥有静态文件,则无需使用

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

您可以参考 django 文档中的Managing Static Files

【讨论】:

  • 还是不行。顺便说一句,终端输出显示:[16/Apr/2019 16:12:25] "GET /static/css/struct.css HTTP/1.1" 500 27
  • 编辑:如果我将调试设置为 True,则一切正常,但设置为 False 时无济于事。为什么?
  • 你的模板渲染的时候有没有查看源代码,然后点击源代码中css的相应链接,查看文件是否打开...从您的评论中,您仍然以错误的方式提供链接,路径应该是 static/appname/css/ ,因为您在获取 /static/css/struc.css 时遇到错误,您做错了。再次阅读我提到的步骤并阅读文档,.检查此链接以关闭调试docs.djangoproject.com/en/2.2/howto/deployment/checklist
  • 在您的应用程序文件夹中创建一个名为static的文件夹,然后创建另一个与您的应用程序名称相同的文件夹,在该文件夹中放置您的静态文件,我提到的步骤将起作用
  • @qux 如果你设置了 debug=false 你必须关注docs.djangoproject.com/en/2.2/howto/deployment/checklist
【解决方案2】:

在settings.py中定义静态根

STATIC_ROOT = BASE_DIR + '/static/'

希望对你有帮助

参考this

【讨论】:

  • 没有帮助:
  • ERRORS: ?: (staticfiles.E002) STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置。
  • 正确。 STATICFILES_DIRS 是 source 文件夹的列表,用于通过运行 collectstatic 来完成 STATIC_ROOT 文件夹(此处为 destination)。只需删除 STATICFILES_DIRS。 @qux 但仍然不连接字符串,如显示的灰色 - 由 os.path.join 完成。
【解决方案3】:

如果您在 localhost 上运行此应用程序,那么您可以尝试设置 DEBUG = True 如果您错误地将其设置为 False, 因为它是为我修好的。

【讨论】:

    猜你喜欢
    • 2013-02-28
    • 2011-11-26
    • 2013-07-28
    • 2020-10-21
    • 1970-01-01
    • 2018-11-16
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多