如何配置Django的“staticfiles”应用程序列出目录内容?

时间:2013-05-15 12:20:43

标签: django django-1.5

我在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列出目录内容?

4 个答案:

答案 0 :(得分:7)

只是为了完整,因为它可以帮助其他人,这就是我为解决问题所做的。

按照@ Hedde的回答,我开始使用show_indexes

settings.py

  • 保持所有配置相同(即所有STATIC*变量)
  • 'django.contrib.staticfiles'
  • 中删除了INSTALLED_APPS

问题是我无法使用Django的“内置”方法为静态文件配置指定show_indexes参数(通过settings.py)。通过'django.contrib.staticfiles'中的INSTALLED_APPS,Django将使用show_indexes = False创建静态文件处理程序,忽略我的urlpatterns

urls.py

在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

根据documentation

答案 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)  
相关问题