簡體   English   中英

如何使用Django的開發服務器提供收集的靜態文件?

[英]How to serve collected static files with Django's development server?

我正在嘗試使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_ROOTSTATIC_ROOT ,並且它完美地工作。

我假設它也會告訴Django在STATIC_ROOT目錄中查找靜態文件,我錯了。 即使STATIC_ROOT目錄不存在,Django也能夠提供靜態文件。 但是如果缺少os.path.join(ROOT_PATH, 'front') ,Django就不再提供靜態文件了。

這表明Django繼續從sources目錄而不是STATIC_ROOT提供靜態文件。

所以我想知道是否有辦法指示Django的開發服務器從STATIC_ROOT提供靜態文件。 任何提示?

編輯:

在@ e4c5的回答后,我修改了我的root 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    

這是使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM