2012-04-15 113 views
12

我似乎无法让我的静态文件从我的模板加载。我遵循官方文件,但我必须错过一些东西。Django没有提供静态文件,404错误

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

+2

尝试:'python manage.py findstatic --verbosity 2 css/styles.css'来查看Django在哪里查找您的静态文件。 – deed02392 2016-05-11 09:32:30

回答

22

你在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'), 
) 
+0

是的我已经加载了'django.contrib.staticfiles',并且在我的设置文件中有'STATIC_URL ='/ static /''。 – n0pe 2012-04-15 20:32:51

+0

您是否填写了静态文件夹的绝对路径STATICFILES_DIRS?就像上面说的那样。 – shadrx 2012-04-15 20:34:15

+0

不!我添加了绝对的OS路径到我的静态目录,它工作。非常感谢。 – n0pe 2012-04-15 20:36:46

1

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

你为什么这么想?如果你遵循官方文件,你将不会发现这一点。阅读你在开发的服务。

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

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

+0

我在本地运行,所以我尝试了'localhost/static /','localhost:8000/static'和'/ static /'都有相同的结果。当我使用'localhost'方法时,我只是从Chrome浏览器获得了一个'about:blank'页面。当我使用'/ static /'时,我得到了另一个404。 – n0pe 2012-04-15 20:21:07

+0

为了响应你给出的链接,我使用'runserver'方法,我的文件在STATIC_URL,根据文档,它意味着它应该自动。我也尝试导入链接建议的模块,但仍然没有。 – n0pe 2012-04-15 20:23:42

1

检查STATICFILES_FINDERSsettings.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

3

这对静态/媒体/ Django中的Windows模板访问工作方案,

settings.py

import os.path 

STATIC_ROOT = '' 

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    os.path.join('static'), 
) 
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> 
3

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

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

我的解决办法是设置DEBUG = True解决。