我已经按照this question,the documentation中的说明进行了操作,甚至查看了this one,但是到目前为止,我无法使用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
,它告诉我不允许目录索引。我在这里想念什么?
最佳答案
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中)并将静态文件移动到应用程序目录中。希望这可以使事情变得简单。
关于python - 尝试在开发服务器上提供Django静态文件-找不到,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12026010/