Django如何正确加载静态文件

一,debug=False时:

Tips:在生产环境中一般不会使用Django处理静态文件。

1.修改setting.py:
#设置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.收集静态文件
  • 这个步骤是必须的,即使你已经将静态资源放在了STATIC_ROOT中,这么做的目的是为了收集其它地方例如Admin后台的静态资源
#使用该命令前,需要先配置STATIC_ROOT 
$ python manage.py collectstatic
可通过命令:python manage.py collectstatic --help查看帮助
3.在urls.py中新增以下内容:

该部分内容就是用来代替django.contrib.staticfiles的,配置好后,我们还可以直接通过url链接访问staticmedia里面的资源

from django.views.static import serve 
from django.conf import settings 
urlpatterns = [
       path('admin/', admin.site.urls),
       ...
       #新增以下内容: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}),
]

4. 当debug=Fasle时,如果仍希望静态资源应用程序提供静态资源,Django提供了insecure参数来强制处理静态资源,但是这样处理静态资源效率非常低,而且极不安全。因此,仅用于本地开发,不要在生产环境中使用。

$ python manage.py runserver --insecure

二,debug=True时

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')
settings.py部分

如果希望通过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)
假设现在static和media文件夹下各有一个名为1.png的文件,我们可以直接通过链接访问(服务器为:127.0.0.1:8000):
    http://localhost:8000/static/1.png
    http://localhost:8000/media/1.png

4. 当debug=Fasle时,如果仍希望静态资源应用程序提供静态资源,Django提供了insecure参数来强制处理静态资源,但是这样处理静态资源效率非常低,而且极不安全。因此,仅用于本地开发,不要在生产环境中使用。

20200517220734416

 

© 版权声明
THE END
喜欢就支持一下吧
点赞9赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容