為什么需要進行設(shè)置
在開發(fā)環(huán)境中(debug=True),django的
django.contrib.staticfiles會自動幫我們進行靜態(tài)資源的處理,然而在生產(chǎn)環(huán)境中(debug=False),就不起作用了,這時候就要進行額外的設(shè)置
一,debug=False時:
Tips:在生產(chǎn)環(huán)境中一般不會使用Django處理靜態(tài)文件。
1.修改setting.py:
#設(shè)置debug=false
debug=false
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
2.收集靜態(tài)文件
- 這個步驟是必須的,即使你已經(jīng)將靜態(tài)資源放在了
STATIC_ROOT中,這么做的目的是為了收集其它地方例如Admin后臺的靜態(tài)資源
#使用該命令前,需要先配置STATIC_ROOT
$ python manage.py collectstatic
可通過命令:
python manage.py collectstatic --help查看幫助
3.在urls.py中新增以下內(nèi)容:
該部分內(nèi)容就是用來代替django.contrib.staticfiles的,配置好后,我們還可以直接通過url鏈接訪問static和media里面的資源
from django.views.static import serve
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
...
#新增以下內(nèi)容:debug=False
re_path(r'^static/(?P<path>.*)/$', serve, {'document_root': settings.STATIC_ROOT}),
re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
]
當debug=Fasle時,如果仍希望靜態(tài)資源應(yīng)用程序提供靜態(tài)資源,Django提供了
insecure參數(shù)來強制處理靜態(tài)資源,但是這樣處理靜態(tài)資源效率非常低,而且極不安全。因此,僅用于本地開發(fā),不要在生產(chǎn)環(huán)境中使用。
$ python manage.py runserver --insecure
二,debug=True時
settings.py部分
debug=True
...
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
#無需配置STATIC_ROOT
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
如果希望通過url直接訪問media資源,還可在主路由urls.py進行這樣配置,注意這里的配置和debug=False的配置不一樣:
...
from django.conf.urls.static import static
from django.conf import settings
...
urlpatterns = [
path('admin/', admin.site.urls),
]
#新增部分 debug=True,static部分不用加,原因是Django會自動幫我們處理
#urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
假設(shè)現(xiàn)在static和media文件夾下各有一個名為1.png的文件,我們可以直接通過鏈接訪問(服務(wù)器為:127.0.0.1:8000):
http://localhost:8000/static/1.png
http://localhost:8000/media/1.png