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

Try*_*yph 6 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')
)
Run Code Online (Sandbox Code Playgroud)

这使得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 继续从源目录提供静态文件,而不是从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)
Run Code Online (Sandbox Code Playgroud)

不幸的是,它没有预期的结果并且 Django 没有STATIC_ROOTSTATIC_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
Run Code Online (Sandbox Code Playgroud)

以下是设置变量的内容:

>>> 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/'
Run Code Online (Sandbox Code Playgroud)

这是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    
Run Code Online (Sandbox Code Playgroud)

e4c*_*4c5 3

这是使用static.serve完成的

\n\n
\n

除了您的项目\xe2\x80\x99s 静态资产之外,可能还有其他文件,为了方便起见,您\xe2\x80\x99d 希望让 Django 在本地开发中为您提供服务。serve() 视图可用于为您提供的任何目录提供服务。(此视图未针对生产用途进行强化,仅应用作开发辅助;您应使用真正的前端 Web 服务器在生产中提供这些文件

\n
\n\n

像这样更改你的 urls.py :

\n\n
from django.conf import settings\nfrom django.conf.urls.static import static\nurlpatterns = [\n    # ... the rest of your URLconf goes here ...\n] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)\n
Run Code Online (Sandbox Code Playgroud)\n