12

我已经按照这个问题文档中的说明进行操作,甚至还查看了这个,但到目前为止,我无法使用python manage.py runserver.

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

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

在我的 urls.py 中:

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

我的 base.html 中有以下代码

    <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/,或者localhost:8000/static/styles它告诉我不允许目录索引。

我在这里想念什么?

4

1 回答 1

15

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

简短的回答是移动你的静态文件;代替

/home/wayne/programming/somesite/static

把它们放进去

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

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

更长的答案是我认为您(可以理解)对各种设置感到困惑。STATIC_ROOT 仅指静态文件在运行后应该结束的位置manage.py collectstaticcollectstatic在本地开发时,你不需要这个集合(因为你不应该真的需要)。无论哪种方式,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(在默认的 STATICFILES_FINDERS 中)并将您的静态文件移动到应用程序目录。

希望这能澄清一点。

于 2012-08-19T19:14:12.317 回答