2013-08-01 78 views
5

我需要一点帮助,我一直在寻找一个没有结果的解决方案。Django 1.5 GET 404静态文件

这是我的设置: settings.py:

STATIC_ROOT = '' 

# URL prefix for static files. 
# Example: "http://media.lawrence.com/static/" 

STATIC_URL = '/static/' 

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

STATICFILES_DIRS = (
    PROJECT_ROOT + '/static/' 
) 

安装的程序:

INSTALLED_APPS = [ 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.admin', . . . 

运行带有DEBUG = TRUE:

August 01, 2013 - 16:59:44 
Django version 1.5.1, using settings 'settings' 
Development server is running at http://127.0.0.1:8000/ 
Quit the server with CONTROL-C. 
[01/Aug/2013 16:59:50] "GET/HTTP/1.1" 200 6161 
[01/Aug/2013 16:59:50] "GET /static/media/css/jquery-ui/ui-lightness/jquery-ui- 1.10.3.custom.min.css HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/css/bootstrap/bootstrap.css HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/css/bootstrap/bootstrap-responsive.min.css  HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/css/styles.css HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/js/jquery/jquery-1.9.1.min.js HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/js/bootstrap/bootstrap.min.js HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/js/jquery-ui/jquery-ui-1.10.3.custom.min.js HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/js/messages.js HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/js/validate/jquery.validate.min.js HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/images/FERREMOLQUES2.png HTTP/1.1" 404 5904 
[01/Aug/2013 16:59:50] "GET /static/media/js/dynamic-style.js HTTP/1.1" 404 5904 

作为特别提到我运行Django 1.5.1和Python 2.7.5在VIRTUALENV。我不知道这个配置是造成问题

任何帮助会感激

感谢。

编辑:当我关闭VIRTUALENV并安装适当版本的Django和项目的依赖关系时,我的项目运行良好,没有任何问题。 。 。静态显示,因为它应该

+0

您还记得把东西放在你的静态文件夹,对不对?它看起来像期待它们都在一个静态文件夹中,而不是在每个应用程序中。此外,在Django 1.5中,文档建议使用'{%static %}' –

+0

当然,在此处发布此问题之前,我会谨慎。 – Archie

回答

8

你确定你的STATICFILE_DIRS是正确的吗?如果您的设置目前处于这种状态,则static文件夹应与settings.py处于同一级别。

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) # it means settings.py is in PROJECT_ROOT? 
STATICFILES_DIRS = (
    PROJECT_ROOT + '/static/', # <= don't forget a comma here 
) 

我的正常settings.py有点不同:

ROOT_PATH = path.join(path.dirname(__file__), '..') # up one level from settings.py 
STATICFILES_DIRS = (
    path.abspath(path.join(ROOT_PATH, 'static')), # static is on root level 
) 

除此之外,你需要django.core.context_processors.static为背景处理器:

TEMPLATE_CONTEXT_PROCESSORS = (
    # other context processors.... 
    'django.core.context_processors.static', 
) 

并启用urls.py的URLPATTERN:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
urlpatterns += staticfiles_urlpatterns() 

希望它有帮助!

+0

嗨,感谢您的快速响应。实际上,settings.py与静态相同,在项目的根文件夹中有应用程序文件夹,静态文件夹,设置和manage.py。我添加逗号,但问题仍然存在。 。 。 – Archie

+0

好的,请检查我编辑的答案以获得更多线索。 –

+0

再次感谢,即使没有更改代码中的任何内容,唯一能解决我的问题的方法就是不使用VIRTUALENV,但为什么?我不明白为什么我无法使用VIRTUALENV获得静态文件。 。 。并且真的需要virtualenv,我不喜欢在我的机器上安装每个依赖项,并且我喜欢用python 3和2来证明与django 1.4和1.5相同的东西 无论如何请求帮助 – Archie

3

几个小时,寻找任何解决方案的时间,最后我发现,这个问题是一个错误:

https://bugzilla.redhat.com/show_bug.cgi?id=962223

我不知道,如果这个bug是由Django的或Python,我的Django的版本是1.5.1,Python是2.7.5。我需要在之前的django和python版本中进行证明,看看是否存在bug。

我的setting.py在DEBUG=False,当我将其更改为True时,问题已经消失,现在正在开发中,我并不担心这个问题,但是当我的项目达到生产时,我会等待补丁。再次

感谢。

+0

谢谢,这对我有效 – Yefei

+0

嗨,谢谢,这个对我也有帮助,但需要对生产服务器使用false。我在django 1.10.5和python 2.7.12中,仍然遇到这个问题。 – zhihong

+0

嗨,后来发现这在django doc中提到过,并且提到当DEBUG = True和False时,静态文件的设置是不同的。在这里检查文档.https://docs.djangoproject.com/en/1.10/howto/static-files/ – zhihong

1

这个问题是因为在非调试模式静态文件处理程序发生的事情是WSGI按下面的代码行,这不处理settings.STATIC_ROOT路径 -

文件位置 - django.contrib.staticfiles.management.commands。运行服务器

def get_handler(self, *args, **options): 
    """ 
    Returns the static files serving handler wrapping the default handler, 
    if static files should be served. Otherwise just returns the default 
    handler. 

    """ 
    handler = super(Command, self).get_handler(*args, **options) 
    use_static_handler = options.get('use_static_handler', True) 
    insecure_serving = options.get('insecure_serving', False) 
    if use_static_handler and (settings.DEBUG or insecure_serving): 
     return StaticFilesHandler(handler) 
    return handler 

为了解决这个问题,我添加了一个其他的检查,如下面的代码所示,它工作正常。

def get_handler(self, *args, **options): 
     """ 
     Returns the static files serving handler wrapping the default handler, 
     if static files should be served. Otherwise just returns the default 
     handler. 

     """ 
     handler = super(Command, self).get_handler(*args, **options) 
     use_static_handler = options.get('use_static_handler', True) 
     insecure_serving = options.get('insecure_serving', False) 
     if use_static_handler and (settings.DEBUG or insecure_serving): 
      return StaticFilesHandler(handler) 
     elif use_static_handler: 
      return StaticFilesHandler(handler) 
     return handler 

感谢,
拉夫