[英]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_ROOT
到STATIC_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.