【问题标题】:Django isn't serving static files, getting 404 errorsDjango 不提供静态文件,出现 404 错误
【发布时间】:2012-04-15 20:09:22
【问题描述】:

我似乎无法从我的模板中加载我的静态文件。我已经按照官方文档进行了操作,但我一定遗漏了一些东西。

我的目录布局(由 Django 生成,大部分文件省略):

myproject
  myproject
    settings.py
    urls.py
  static
    css
      bootstrap.css
      main.css
  templates
    base.html
  myapp1
  myapp2
  ...
  manage.py

我的settings.py

STATIC_URL = 'static/'

我这样引用我的样式表(来自我的模板):

{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/bootstrap.css" %}" type="text/css">
<link rel="stylesheet" href="{% static "css/style.css" %}" type="text/css"> 

这一次渲染(在 HTML 中):

<link rel="stylesheet" href="static/css/bootstrap.css" type="text/css">
<link rel="stylesheet" href="static/css/style.css" type="text/css"> 

然而这些链接实际上并没有指向任何地方(当我访问它们时,我从 Django 收到 404 错误)。我觉得我可以通过在urls.py 中添加一些东西来解决这个问题,但是我认为 Django 在您运行服务器时会自动执行此操作?我错过了什么?

【问题讨论】:

  • 试试:python manage.py findstatic --verbosity 2 css/styles.css 看看 Django 在哪里寻找你的静态文件。

标签: python css django url-routing


【解决方案1】:

您是否在settings.py 中定义了静态文件目录?

我猜你在安装的应用中有'django.contrib.staticfiles',

如果你还没有定义你的静态文件目录,你可以这样做:

import os.path

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)

【讨论】:

  • 是的,我已经加载了django.contrib.staticfiles,并且我的设置文件中有STATIC_URL = '/static/'
  • 您是否在 STATICFILES_DIRS 中填写了静态文件夹的绝对路径?就像上面的答案所说的那样。
  • 不!我将绝对操作系统路径添加到我的静态目录中并且它工作。非常感谢。
  • 甜蜜。如果您想了解更多关于静态文件应用程序的信息...docs.djangoproject.com/en/dev/ref/contrib/staticfiles/…
【解决方案2】:

这是 django for windows 中静态/媒体/模板访问的有效解决方案,

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join('static'),
)

【讨论】:

    【解决方案3】:

    通过在 settings.py 文件中添加“STATICFILES_DIRS”解决了我的问题

    STATIC_URL = '/static/'
    STATICFILES_DIRS = ( os.path.join('static'), )
    

    【讨论】:

      【解决方案4】:

      我以为 Django 在您运行服务器时会自动执行此操作?

      你为什么这么认为?如果您遵循官方文档,您将不会发现这一点。阅读在开发中为他们服务您必须做的事情here

      还有一个问题。您的 STATIC_URL 是一个相对链接,因此浏览器将其添加到现有页面 URL。因此,如果您在页面 /foo'static/css/style.css' 的计算结果为 /foo/static/css/style.css'

      确保它以 / 开头 - 即 /static/ - 或者是完整的 URL,即 http://myserver.com/static/

      【讨论】:

      • 我在本地运行它,所以我尝试了localhost/static/localhost:8000/static/static/,结果都一样。当我使用 localhost 方法时,我只是从 Chrome 中获得了一个 about:blank 页面。当我使用/static/ 时,我得到了另一个 404。
      • 响应您提供的链接,我正在使用runserver 方法,并且我的文件位于 STATIC_URL,这(根据文档)意味着它应该是自动的。我也尝试导入链接建议的模块,但仍然没有。
      【解决方案5】:

      检查STATICFILES_FINDERS 是否在您的settings.py 中定义

      https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_FINDERS

      STATICFILES_FINDERS 的默认值已经足够了,但你有 2 个选择:

      • 您需要将静态文件包含在应用程序中,并将此应用程序包含在您的INSTALLED_APPS

      • 或者如果期望行为是 django.contrib.staticfiles.finders.FileSystemFinder 之一,则需要使用静态文件的路径定义 STATICFILES_DIRS

      【讨论】:

        【解决方案6】:

        我也遇到过这个问题。我通过像这样修改href解决了这个问题:

        <html>
        <link rel="stylesheet" href="{{STATIC_URL}}css/bootstrap.css" type="text/css">
        <link rel="stylesheet" href="{{STATIC_URL}}css/style.css" type="text/css"> 
        </html>
        

        【讨论】:

          【解决方案7】:

          确保您在正确的位置设置了静态文件夹,也就是说,如果它在 app 文件夹中,那么您可以从这个有用的资源1 中获得进一步的说明。

          【讨论】:

            【解决方案8】:

            我的解决方案是设置中的DEBUG = True

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-09-04
              • 2015-02-28
              • 2015-11-20
              • 1970-01-01
              • 2015-03-13
              • 2019-04-12
              • 1970-01-01
              • 2019-08-21
              相关资源
              最近更新 更多