当前位置:   article > 正文

Django的STATICFILES_DIRS、STATIC_ROOT、STATIC_URL、MEDIA_ROOT详解

staticfiles_dirs

STATICFILES_DIRS:

django静态文件的安放位置有两种:

      1.每个app里面的static文件夹。在加载静态文件时,比如要在模板中用到静态文件,django默认会自动在每个app里面搜索static文件           夹。

      2.另一种,就是在所有的app件外面,建立一个公共的文件夹如common_static。

那现在的问题是如何让django知道你把一些静态文件放到app以外的公共文件夹中呢,

那就需要配置STATICFILES_DIRS=[os.path.join(BASE_DIR, 'static')]

STATICFILES_DIRS告诉django,首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的static文件夹里面找(注意,django查找静态文件是惰性查找,查找到第一个,就停止查找了)

 

STATIC_ROOT:

django在生产环境下会关闭对外提供静态文件的功能,那么如何经静态文件返回给浏览器呢,这就是STATIC_ROOT的功能。

例如STATIC_ROOT=os.path.join(BASE_DIR, 'static_collections')

执行 python managy.py collectstatic

django会收集app下的静态文件、admin静态文件、STATICFILES_DIRS静态文件、及其他第三发库中包含的静态文件到这个目录下。之后再用nginx指向该路径,将静态文件代理出去。或者配置url.py:

urlpatterns = [
    ...
    url(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}), # 生产环境下对外提供静态文件的url
]

 

STATIC_URL:

那么到此为止,静态文件的机制就可以运作了,但是,你通过浏览器访问静态文件时,不可能直接通过http://127.0.0.1:8000/home/myproject/common_static/images/1.png 这样的地址访问吧,结果会直接报错。

那么django是如何让浏览器也可以访问服务器上的静态文件呢,前面已经说了,直接访问服务器本地的地址是不行的,那就需要一个映射,django利用STATIC_URL来让浏览器可以直接访问静态文件,比如:

STATIC_URL = '/static/'

那么可以在浏览器上输入: 

http://127.0.0.1:8000/static/images/1.png

那么就相当与访问:

/home/myproject/common_static/images/1.png

 

MEDIA_ROOT:

MEDIA_ROOT主要是用来放置用户上传的文件。Django的ORM有个特殊的字段叫做FileField是用来存储文件的。不过实际上并不会把文件内容存到数据库里面,而是保存在MEDIA_ROOT文件夹下,FileField只记录一个路径。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/489571
推荐阅读
相关标签
  

闽ICP备14008679号