Django如何正確加載靜態(tài)文件

為什么需要進行設(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鏈接訪問staticmedia里面的資源

   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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容