2012-04-18 109 views
12

我是一个Django新手,在我的第一个项目上工作并遇到静态文件的问题。Django静态文件将不会加载

我已经使用由两个模板组成的django.contrib.auth创建了一个简单的认证系统:mysite/templates/index.htmlmysite/templates/registration/login.html。我有mysite/static全球静态内容,我希望能够访问所有应用程序呈现的所有模板。

mysite/templates/index.html包含<img src="{{ STATIC_URL }}pics03.jpg"/>当我访问的URL localhost:8000/

mysite/templates/registration/login.html包含<img src="{{ STATIC_URL }}pics03.jpg"/>也呈现为"static/pics03.jpg",当我访问的URL "localhost:8000/accounts/login/"

在我的网址不会加载它呈现为"static/pics03.jpg"和加载罚款。 py我有:

urlpatterns = patterns('', 
    url(r'^$', 'mysite.views.home'), # plays index.html template 
    url(r'^accounts/login/$', 'django.contrib.auth.views.login'), 

在我的settings.py我有:

PROJECT_DIR = os.path.dirname(__file__) 

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    os.path.join(PROJECT_DIR,'static'), 
) 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

STATIC_URL = '/static/' 

STATIC_ROOT = '' 

我是Django的应该寻找在STATICFILES_DIRS全球静态内容的印象,但即使我在那里更改URL以一个绝对路径它没有找到login.html的静态内容静态文件夹。任何人都可以对此有所了解吗?

回答

18

你的问题是,你的arent听URL“/静态/”无处在你的urls.py

如果你通过像Apache或nginx的Web服务器为你的应用程序,那么这是正常的,因为Web服务器会处理静态文件本身。

对于开发Django带有一个内置的静态服务器

到urls.py文件,在最后添加

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

这样做是添加/静态/ URL,让你为没有Web服务器的人提供服务。

这相当于

url(
    regex=r'^static/(?P<path>.*)$', 
    view='django.views.static.serve', 
    kwargs={'document_root': settings.STATIC_ROOT,} 
) 

有些人会告诉你,你需要用一个“如果settings.DEBUG”的URL规则使用DEV-唯一规则,但这个心不是需要在所有,实际上我发现这是一个不好的建议。

+0

是的,这是问题..谢谢! – JimJay 2012-04-28 17:41:34

+0

那么,实际上在后一种情况下,有必要包装该规则。如果你看看django的代码,你会发现这个视图不会检查DEBUG。 – 2013-02-25 21:57:16

+2

该视图从未命中,因为您的网络服务器设置为捕获这些文件并提供静态文件,因此不需要检查。 – krs 2013-04-08 02:31:46

1

你使用的runserver构建或者您服务使用Apache或类似的,当有麻烦?我一直在努力。我按照文档:当你准备部署https://docs.djangoproject.com/en/dev/howto/static-files/

第二部分是关键。您需要定义一个静态根目录(该目录将为空)并运行manage.py collectstatic命令将整个项目中的静态文件移动到该文件夹​​中。然后你可以从那里为他们服务。

+0

我只是使用runserver目前没有准备好部署 – JimJay 2012-04-18 20:34:11

0

是否改变STATIC_ROOT=''STATIC_ROOT='/'有帮助?

在我看来,唯一的区别是,static/pics03.jpg(相对路径)在主页上存在,但不会对其他。

在两种情况下都存在绝对路径/static/pics03.jpg。如果改变STATIC_ROOT没有帮助,只是增加一个/到网址的开头。