8

我在调试模式下使用 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应用程序列出目录内容?

4

4 回答 4

12

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

在@Hedde 的回答之后,我开始使用show_indexes

设置.py

  • 保持所有配置相同(即所有STATIC*变量)
  • 已从'django.contrib.staticfiles'_INSTALLED_APPS

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

网址.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})
于 2013-05-15T13:50:04.807 回答
6
'show_indexes': True

根据文档

于 2013-05-15T12:28:43.950 回答
1

这些文件不应该由 django 提供。显示索引是 apache/nginx 的配置参数。

在生产中,使用 nginx,只需添加到静态服务部分:

    location ^~ /static/ {
            autoindex on;
            root /var/www/static_dir;
            if ($query_string) {
                    expires max;
            }
    }

对于开发环境,Hedde 的答案确实是一个很好的答案,但显示可能与您的 HTTP 服务器提供的显示不完全相同。不要依赖它的外观和感觉。

于 2013-05-15T12:27:16.487 回答
1

From https://docs.djangoproject.com/en/1.5/ref/views/#django.views.static.serve ...

static.serve(request, path, document_root, show_indexes=True)  
于 2013-05-15T12:30:37.573 回答