我在DEBUG模式下使用Django的内置Web服务器。
这是我的settings.py
:
STATIC_ROOT = '/home/user/static_root'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'/abs/path/to/static/dir',
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
如果我访问http://localhost:8000/static/png/
,我希望在/abs/path/to/static/dir/png
中看到可用的文件列表。相反,我收到404错误“此处不允许使用目录索引。”
现在,如果我直接访问文件,例如http://localhost:8000/static/png/test.png
,它有效。
我已经检查了一些答案(here)但没有成功。
那么,有没有人知道如何配置Django以使staticfiles
app列出目录内容?
答案 0 :(得分:7)
只是为了完整,因为它可以帮助其他人,这就是我为解决问题所做的。
按照@ Hedde的回答,我开始使用show_indexes
:
STATIC*
变量)'django.contrib.staticfiles'
INSTALLED_APPS
问题是我无法使用Django的“内置”方法为静态文件配置指定show_indexes
参数(通过settings.py
)。通过'django.contrib.staticfiles'
中的INSTALLED_APPS
,Django将使用show_indexes = False
创建静态文件处理程序,忽略我的urlpatterns
。
在urlpatterns中添加了以下内容:
url(regex = r'^%s(?P<path>.*)$' % settings.STATIC_URL[1:],
view = 'django.views.static.serve',
kwargs = {'document_root': '/abs/path/to/static/dir',
'show_indexes' : True})
答案 1 :(得分:4)
'show_indexes': True
答案 2 :(得分:1)
这些文件并不是由django提供的。显示索引是apache / nginx的配置参数。
在生产中,使用nginx,只需添加到静态服务部分:
location ^~ /static/ {
autoindex on;
root /var/www/static_dir;
if ($query_string) {
expires max;
}
}
对于开发环境,Hedde的答案确实是一个很好的答案,但显示可能与您的HTTP服务器提供的显示不完全相同。不要依赖它的外观和感觉。
答案 3 :(得分:0)
来自https://docs.djangoproject.com/en/1.5/ref/views/#django.views.static.serve ...
static.serve(request, path, document_root, show_indexes=True)