如何使用Django的开发服务器提供收集的静态文件?

时间:2017-05-28 14:58:12

标签: django

我正在尝试使Django的开发服务器提供由python manage.py collectstatic命令收集的静态文件。现在我失败了。

我的Django设置文件声明:

STATIC_ROOT = os.path.join(WWW_PATH, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(ROOT_PATH, 'front', 'public'),
    os.path.join(ROOT_PATH, 'front', 'dist')
)

这使得collectstatic命令可以将文件从os.path.join(ROOT_PATH, 'front', 'public')os.path.join(ROOT_PATH, 'front', 'dist')复制到STATIC_ROOT,并且运行正常。

我假设它也会告诉Django在STATIC_ROOT目录中查找静态文件,我错了。即使STATIC_ROOT目录不存在,Django也能够提供静态文件。但如果缺少os.path.join(ROOT_PATH, 'front'),则Django不再提供静态文件。

这表明Django继续从sources目录提供静态文件,而不是STATIC_ROOT

所以我想知道是否有办法指示Django的开发服务器提供来自STATIC_ROOT的静态文件。任何提示?

修改

在@ e4c5的回答之后,我修改了我的根urls.py,如下所示:

static_patterns = [
    url(r'^$', TemplateView.as_view(template_name='index.html'))
]

urlpatterns = [
    url(r'^', include(static_patterns)),
    url(r'^admin/', admin.site.urls),
    url(r'^api/resa/', include('reservation.urls')),
    url(r'^api/auth/', include('authentication.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

不幸的是,它没有预期的结果,Django在STATIC_ROOT中找不到静态文件,我怀疑它实际上是在STATIC_ROOT查找静态文件。

这是我在访问索引页面时在控制台中可以看到的内容:

[04/Jun/2017 16:18:05] "GET / HTTP/1.1" 200 1411
[04/Jun/2017 16:18:05] "GET /static/style/index.css HTTP/1.1" 404 1759
[04/Jun/2017 16:18:05] "GET /static/style/react-datetime.css HTTP/1.1" 404 1786
[04/Jun/2017 16:18:05] "GET /static/style/react-big-calendar.css HTTP/1.1" 404 1798
[04/Jun/2017 16:18:05] "GET /static/script/bundle.js HTTP/1.1" 404 1762

以下是设置变量的内容:

>>> from django.conf import settings
>>> settings.WWW_PATH
'/home/tryph/PycharmProjects/resa/www'
>>> settings.STATIC_ROOT
'/home/tryph/PycharmProjects/resa/www/static'
>>> settings.STATIC_URL
'/static/'

这是WWW_PATH目录的内容:

/home/tryph/PycharmProjects/resa/www
└── static
    ├── admin
    │   [...]
    ├── favicon.ico
    ├── index.html
    ├── rest_framework
    │   [...]
    ├── script
    │   └── bundle.js
    └── style
        ├── index.css
        ├── react-big-calendar.css
        └── react-datetime.css    

1 个答案:

答案 0 :(得分:2)

这是使用static.serve

完成的
  

可能有项目的静态资产以外的文件   方便,你想让Django在当地为你服务   发展。 serve()视图可用于为您提供任何目录   给它。 (这种观点不适合生产用途,应该是   仅用作发展援助;你应该提供这些文件   使用真正的前端Web服务器进行生产

像这样更改你的urls.py:

from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)