试图在开发服务器上提供django静态文件 - 未找到

时间:2012-08-19 11:08:28

标签: python django

我已按照this questionthe documentation中的说明操作,我甚至查看了this one,但到目前为止,我无法使用{获取我的静态文件{1}}。

这些是我的(相关?)设置:

python manage.py runserver

在我的urls.py中:

STATIC_ROOT '/home/wayne/programming/somesite/static'
STATICFILES_DIRS ('/home/wayne/programming/somesite/static/styles',
                  '/home/wayne/programming/somesite/static/admin')

我在base.html中有以下代码

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# The rest of my urls here...
if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns()

我保证我不会产生幻觉:

    <link rel="stylesheet" type="text/css" href="{% static "styles/main.css" %}">
    {% block styles %}
    {% for sheet in styles %}
    <link rel="stylesheet" type="text/css" href="{% static sheet %}">
    {% endfor %}

但是,当导航到(.env)wayne:~/programming/somesite/static$ pwd /home/wayne/programming/somesite/static (.env)wayne:~/programming/somesite/static$ ls admin styles 我的网站缺少其样式表时,当我转到http://localhost:8000/时,我得到http://localhost:8000/static/styles/main.css,并尝试导航到'styles/main.css' could not be found,或者localhost:8000/static/它告诉我不允许使用目录索引。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:14)

Django对静态文件的处理仍然有点混乱,特别是在相关设置的命名方面。

简短的回答是移动静态文件;而不是

/home/wayne/programming/somesite/static

将它们放入

/home/wayne/programming/somesite/yourapp/static

(其中“yourapp”显然是主应用程序的名称)。

答案越长,我认为你(可以理解)对各种设置感到困惑。 STATIC_ROOT 指的是运行manage.py collectstatic静态文件应该在哪里的位置。在本地开发时,您不需要此集(因为您不应该真正需要collectstatic)。无论哪种方式,STATIC_ROOT都应该始终引用一个空目录。

您的STATICFILES_DIRS设置几乎可以正常工作,除了您告诉Django有两条路径可以找到静态文件

/home/wayne/programming/somesite/static/styles
/home/wayne/programming/somesite/static/admin

所以当你{% static "styles/main.css" %}时,它会寻找

/home/wayne/programming/somesite/static/styles/styles/main.css
/home/wayne/programming/somesite/static/admin/styles/main.css

显然不会找到它们。 可能的工作原理是

STATICFILES_DIRS = ('/home/wayne/programming/somesite/static',)

但是没有必要这样做,因为你可以依靠django.contrib.staticfiles.finders.AppDirectoriesFinder(在the default STATICFILES_FINDERS中)并将静态文件移动到app目录。

希望这可以解决一些问题。