django3开发环境和生产环境中的static

django3对于开发环境和生产环境的static文件存放位置有不同的规定。
假设有一个django3项目:lffdc,他的主目录会有两层:lffdc/lffdc

一、设置访问URL
需要在:lffdc/lffdc/settings.py文件中设置
STATIC_URL = ‘/static/’
这个设置是告诉django3,在你模板里 ,把{% static “images/logo.png” %} 中的 static 替换成“/static/”,替换后的效果就是:/static/images/logo.png
当然你也可以设置成其他什么名字,比如:STATIC_URL = ‘/staticfiles/’,那么把把{% static “images/logo.png” %} 中的 static 替换后的效果就是:/staticfiles/images/logo.png
这个STATIC_URL"静态网址“设置是对开发环境和生产环境都适用的。

二、开发环境
对于开发环境,也就是用python3 manage.py runserver打开的www服务,有两种情况:

1、属于某个app的静态文件
static和templates文件存放在各个app的子目录里。
比如有两个app分别是login、admin,那么相应的css/js/html文件应该存放在如下位置:
lffdc/lffdc/settings.py
lffdc/login/static/login/css
lffdc/login/static/login/js
lffdc/login/static/login/images
lffdc/login/templates/login/base.html
lffdc/admin/static/admin/css
lffdc/admin/static/admin/js
lffdc/admin/static/admin/images
lffdc/admin/templates/admin/base.html
这注意一个问题,就是不同的APP里的静态文件,一定要放在appname/static/appname文件夹下,也就是在static文件夹里再建一个和app同名的文件夹。这么做看上去有点奇怪,但实际上是为了后面在发布网站的时候,把所有app里的静态文件都汇聚到一个文件夹下的时候做准备。
app下面的static这个文件夹是django3固定名称的文件夹,不用另做设置,django可以自动搜索到。

2、不属于某个具体app,而面向整个项目的静态文件
这个需要在配置文件中定义一个目录列表 (STATICFILES_DIRS) ,Django 会从中寻找静态文件。例子:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
]

那么对于我们的项目lffdc来说,有如上的定义,django也会在以下两个地方寻找静态文件:
/var/www/html/lffdc/static
/var/www/static

三、生产环境
生产环境就是把 settings.py里的debug 设置成 False,并在apache服务器下运行的网站。
这个时候,因为django只处理.py的程序文件,而不处理任何其他的静态文件如css/js/html。所以要把静态文件拿到django“外面”,单独设置一个目录。
用settings.py里的 STATIC_ROOT 表示
我这里设置成:

STATIC_ROOT = '/var/www/html/lffdc/staticroot/'

我为什么要设置成 staticroot 而不是 static,就是为了要区别开来,用以表示在生产环境的特定目录。
设置好以后,运行:
python3 manage.py collectstatic
把分散在各自app的static文件夹中的静态文件“收集”过来,都放到
/var/www/html/lffdc/staticroot/
文件夹下。
所以现在来看,各个app中的static文件夹下在套一个该app名称的文件夹的是完全必要的。
收集以后,各文件夹应该是这样的:

/var/www/html/lffdc/settings.py
/var/www/html/lffdc/staticroot/login/css
/var/www/html/lffdc/staticroot/login/js
/var/www/html/lffdc/staticroot/login/images
/var/www/html/lffdc/staticroot/admin/css
/var/www/html/lffdc/staticroot/admin/js
/var/www/html/lffdc/staticroot/admin/images

你可能感兴趣的:(Django3,python3,apache)