Django没有提供静态文件,导致404错误

时间:2012-04-15 20:09:23

标签: python css django url-routing

我似乎无法从我的模板中加载我的静态文件。我遵循了官方文档但我必须遗漏一些东西。

我的目录布局(由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在运行服务器时会自动执行此操作?我错过了什么?

8 个答案:

答案 0 :(得分:23)

您是否在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'),
)

答案 1 :(得分:3)

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

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

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

答案 2 :(得分:3)

我的问题通过添加&#34; STATICFILES_DIRS&#34;在settings.py文件中

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

答案 3 :(得分:1)

  

我认为当您运行服务器时,Django会自动执行此操作吗?

你为什么这么认为?如果您已经按照官方文档进行操作,那么您将无法找到它。阅读您需要做的事情才能在开发中为他们提供服务here

还有另一个问题。您的STATIC_URL是相对链接,因此浏览器添加到现有网页网址中。因此,如果您在页面/foo上,'static/css/style.css'评估为/foo/static/css/style.css'

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

答案 4 :(得分:1)

检查STATICFILES_FINDERS

中是否定义了settings.py

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

默认值STATICFILES_FINDERS足够好,但您有两个选择:

  • 您需要在应用中包含静态文件并在INSTALLED_APPS

  • 中拥有此应用
  • 或者如果期望行为属于STATICFILES_DIRS

  • ,则需要使用您的静态文件路径定义django.contrib.staticfiles.finders.FileSystemFinder

答案 5 :(得分:0)

我也遇到过这个问题。我通过像这样修改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>

答案 6 :(得分:0)

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

答案 7 :(得分:-3)

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