0.问题产生原因
我们项目在后台生成了pdf报告,和png图片, 组长想给pdf报价一个预览功能. 一开始想了很多办法没成功, 搜索时看到有人使用django 静态目录.
1. 首先了解静态文件
比如图片, css, js, pdf等文件(音频文件不包括他属于django的另一个类型media类型), 当前端请求时将这些文件展示给用户看.
2. 主要的几个配置
# 静态文件路径, 也就是你要访问一个静态文件 a.png, 那么你需要加上static/a.png
STATIC_URL = '/static/'
# 静态文件目录, 只有当执行python manage.py collectstatic 时, django会将所有App下面的静态文件搜集到STATIC_ROOT中,
# 生产环境时你只需要将静态文件配置执行这里就可以了(也就是说STATIC_ROOT可以不叫做static, 他可以是任意一个名字, 只不过默认大家这么写而已)
STATIC_ROOT = BASE_DIR.joinpath("static")
# 指向一个我们需要的路径, django会先遍历STATICFILES_DIRS, 找不到才会去所有app下面去遍历, 不过一般我们会将STATICFILES_DIRS 和STATIC_ROOT 配置一样
STATICFILES_DIRS = []
3. 使用
测试环境:
STATIC_URL = '/static/' # 你只需要配置他就可以是你的项目访问到你app下面的static目录中的静态文件(STATIC_URL这是请求静态文件的前缀, 可以随便改, 默认叫做static)
生产环境:
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR.joinpath("static") # 需要额外执行一个python manage.py collectstatic将所有app下面的static目录中的静态文件, 全部按照对应目录拷贝到STATIC_ROOT 对应的路径, 这个过程是自动的
STATICFILES_DIRS = () # 如果你还有不是放在app, 以及STATIC_ROOT路径下的可以通过它指定
比如: STATIC_ROOT 下面有一个images/1.jps 你在html中如何配置才能显示呢
http://xxxxx/static/images/1.jps 即可
4. nginx配置
上面配置完成之后还是不能使用, 原来还需要配合nginx的路由使用真麻烦
location /static/ {
alias /home/NetCTP/InfosecAgile/static/;
index index.html index.htm;
}
5. nginx配置2(把django中的static配置全部注释掉)
直接使用nginx配置不配置django中的静态配置, 我直接给报告换了个目录, 只在nginx上面配置好访问文件的路径就可以了.(但是如果你要是用django模板中引用static_url还是建议使用django的静态目录配置)
location /libs/report/ {
alias /home/NetCTP/InfosecAgile/libs/report/;
index index.html index.htm;
}
参考: