Python3——Django2新手教程(2)静态目录/文件

5、静态目录

5.1、【方案一】简单,但不推荐,适合开发环境使用

简单来说,文件都丢进来,不需要配置路由,只要路径正确,会去找这些文件。

步骤:

  1. 根目录下新建 static文件夹;
  2. settings.py 进行配置,如下:
  3. static目录下新建 abc.html ,body标签内写 abc
  4. 访问 /abc.html,会返回 static/abc.html 的内容;

settings.py的配置:

# 这个是配置访问静态文件的路径的,例如 static 下有 abc.html,那么访问路径是 /static/abc.html
STATIC_URL = '/'

# 这个是配置静态文件夹在哪里
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

注意:

  • 默认情况下,静态文件的优先级比路由匹配高;
  • 所以建议静态文件的路径应以 static 开头;
  • 但是,这样效率极低,也不安全,因此不推荐在生产环境这么做(官方文档如此说的)

5.2【方案二】复杂,但专业,适合生产环境

简单来说,Django 负责路由,而例如 Nginx/CDN 服务器负责处理文件。

参考:https://docs.djangoproject.com/en/2.2/howto/static-files/deployment/

生产环境:

settings.py 文件里,DEBUG = False 为生产环境,DEBUG = True 时为开发环境。

思路:

  1. 将应用(APP)通过配置添加到 settings.py 里;
  2. 配置 collectstatic 命令执行后,将静态文件放在哪里;
  3. 执行 python manage.py collectstatic 命令,将各个应用(APP)(第一步配置)里的静态文件,放到指定文件夹中去(第二步配置);
  4. 让例如 nginx 服务器指向这个文件夹,想访问指定文件时,就通过 nginx 返回该文件(而不是通过 django 来实现);

具体步骤:

1、将应用添加到配置中。例如有一个 homepage 应用,就如下面这么写:

# 这里添加你配置的 app 名,例如 homepage
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 以上都是默认,下面是新加入的
    'homepage'
]

2、配置 collectstatic 命令相关内容,具体见注释:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

# 在这里,当访问静态文件时,会自动添加 static
# 例如访问默认应用 admin 时,他会加载 admin/css/base.css,这里配置后,加载的资源链接变为 /static/admin/css/base.css
# 也可以写为:STATIC_URL = 'http://192.168.0.0/static/' 这样的形式(方便CDN)
STATIC_URL = '/static/'

# 配置默认静态文件夹路径
# 在开发环境下,访问静态资源,可以直接访问这里配置的路径下的文件,例如web访问url为 /static/a.html,实际上访问的是根目录下 /static/a.html 这个文件
# 在生产环境下,会将这些目录下的文件复制到 STATIC_ROOT 这里配置的目录中(注意,如果有同名文件,可能会被覆写,他会提示你)
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

# 当运行 python manage.py collectstatic 的时候
# STATIC_ROOT 目录,是用来将所有 STATICFILES_DIRS 中所有文件夹中的文件,以及各app中(在INSTALLED_APPS里配置)的static中的文件,都复制到这里配置的文件夹中
# 集中之后,方便通过例如 nginx 服务器,或者 CDN 之类的进行部署
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

# 这个是默认设置,Django 默认会在 STATICFILES_DIRS 中的文件夹 和 各app下的static文件夹中找文件
# 注意有先后顺序,找到了就不再继续找了
STATICFILES_FINDERS = (
    # 这个先写的话,如果有重复文件,会优先采用 STATICFILES_DIRS 文件夹中的文件
    "django.contrib.staticfiles.finders.FileSystemFinder",
    # 同上,会优先采用应用中的文件
    "django.contrib.staticfiles.finders.AppDirectoriesFinder"
)

3、执行 python manage.py collectstatic 命令,他会将 homepage 应用中,static目录下的所有文件,和应用里的文件都复制到 STATIC_ROOT 配置的目录中。

建议先删除该文件夹,再执行命令,否则 overwrite 时,可能会出错。

4、将该静态文件夹丢到nginx或者CDN上去即可。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值