我在Windows 8.1上的Django v1.8.2本地测试服务器仅提供某些静态文件。其他人给出了404错误。
#urls.py - excerpt
urlpatterns = [
url(r'^$', views.index)
] + staticfiles_urlpatterns()
#settings.py - excerpt
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main',
'users'
)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
据我所知,开发服务器配置为提供静态文件。运行runserver
时,我没有收到任何警告,并且我的代码没有显示语法错误(import
语句确实存在等等)。为了测试目的,我在启动服务器之前运行collectstatic
只是为了确保至少一次。
我的视图模板是:
{% load staticfiles %}
<img src="{% static 'main/img/ComingSoon.jpg' %}" alt="Coming Soon">
生成的链接为/static/main/img/ComingSoon.jpg
,看起来正确,该文件确实存在于该位置。令我困惑的是,该目录产生404
错误,但提供了其他静态文件。目录层次结构为:
static/
admin/
css/
..
js/
..
img/
..
main/
img/
ComingSoon.jpg
URL localhost:8000/static/admin/img/
提供有关不允许索引的预期消息。但是,无法找到localhost:8000/static/main/img/
报告\main\img\
。两者都是404
状态。 static/admin/img/
内的图片可以正确显示,其链接与发出错误的链接相同。 Django的管理站点确实显示正确。
为什么static/
中的一个目录不能被索引或访问?
答案 0 :(得分:2)
根据关于static/
的{{3}}:
这应该是一个最初为空的目的地目录,用于收集 您的静态文件从其永久位置到一个目录 易于部署;它不是存储静态文件的地方 永久性。您应该在可以找到的目录中执行此操作 staticfiles的finder,默认情况下是'static /'app 子目录和您在STATICFILES_DIRS中包含的任何目录。
我将文件移动到另一个目录,例如:
myApp/
main/
static/
main/
img/
..
static/
..
运行collectstatic
后,我发现脚本按预期在myApp/static/
创建了子目录,并且必须生成所需的URL,因为它现在可以正确地提供文件。