Django runserver没有提供一些静态文件

时间:2015-06-16 01:39:47

标签: django python-3.x

我在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/中的一个目录不能被索引或访问?

1 个答案:

答案 0 :(得分:2)

根据关于static/的{​​{3}}:

  

这应该是一个最初为空的目的地目录,用于收集   您的静态文件从其永久位置到一个目录   易于部署;它不是存储静态文件的地方   永久性。您应该在可以找到的目录中执行此操作   staticfiles的finder,默认情况下是'static /'app   子目录和您在STATICFILES_DIRS中包含的任何目录。

我将文件移动到另一个目录,例如:

myApp/
  main/
    static/
      main/
        img/
          ..
  static/
    ..

运行collectstatic后,我发现脚本按预期在myApp/static/创建了子目录,并且必须生成所需的URL,因为它现在可以正确地提供文件。