一、django加载静态文件
1、首先确保 django.contrib.staticfiles 已经添加到settings.INSTALLED_APPS中。
2、确保在 settings.py中设置了STATIC_URL。
STATIC_URL = '/static/'
3、 app 文件夹下创建一个文件夹 static
4、在 settings.py中添加 STATICFILES_DIRS,
STATICFILES_DIRS = [os.path.join(BASE_DIR,"monitor/static")]
这里BASE_DIR是项目文件夹(quantmonitor),monitor是应用文件夹
5、引用
5.1单模板引用
在模版(html)中使用 load 标签加载 static 标签。
比如要加载在项目的 static 文件夹下image里 0001.jpg 的。那么示例代码如下:
{% load static %} # 注意
<img src="{% static '/image/0001.jpg' % /}"
5.2全项目引用
如果不想每次在模版中加载静态文件都使用 load 加载static 标签,那么可以在 settings.py 中的TEMPLATES/OPTIONS 添加 ‘builtins’:[‘django.templatetags.static’],这样以后在模版中就可以直接使用 static 标签,而不用每个html的 load 了。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'builtins': ['django.templatetags.static'], # 全项目引用静态文件
},
},
]
二、uwsgi加载静态文件(nginx调通后可关闭)
一般的方法是“映射”指定请求前缀到你的文件系统上的物理目录。
# --static-map mountpoint=path 选项可以实现此目的。
--static-map /images=/var/www/img # 注意要写绝对路径
修改uwsgi.ini
# static-map = /static=<项目路径>/static 注意有两个=
static-map = /static=/data/monitor/static/ # 注意要写绝对路径
三、Nginx加载静态文件
location /static/ {
alias /data/wwwroot/quantmonitor/monitor/static/; #静态资源路径 注意绝对路径
}
这里配置的location /static 是说请求为/static的静态文件都去/root、wechat_huoyun/static下去找,也就是我们项目根目录下的static去找,而不是我们每个APP下的static文件下去找,网上有很多教程,关于static的配置写法也有很多,
注意alias和root的区别,
root /path相当于访问static的时候是访问/path/static,
而alias /path相当于访问static时是访问/path/。
所以你要是写了root /root/wechat_huoyun/static;nginx会去找/root/wechat_huoyun/static/static里找,那估计就找不到了。
Nginx其他配置详见centos7 部署网页实战记录django+uwsgi+nginx
四、文件同步
4.1settings文件修改:
ALLOWED_HOSTS = ["*"] #
STATIC_URL = '/static/' # 通过url直接访问我在项目中的静态文件
STATIC_ROOT = str(os.path.join(BASE_DIR, "monitor/static")) # 静态文静聚合的目录,app以外的公共文件夹,不做聚合可以不用
# STATIC_ROOT = os.path.join(BASE_DIR, "monitor", "static"),
print(STATIC_ROOT)
STATICFILES_DIRS = [
# ('css', os.path.join(STATIC_ROOT, 'css').replace('\','/') ),
# ('js',os.path.join(STATIC_ROOT,'js').replace('\','/') ),
('image', os.path.join(STATIC_ROOT, 'image').replace('\', '/')),
# ('upload',os.path.join(STATIC_ROOT,'upload').replace('\','/') ),
]
# print(STATICFILES_DIRS)
STATICFILES_FINDERS = (
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder"
)
4.2urls文件
静态文件 调用路径
re_path(r'^/monitor/static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),
注意相对路径,要从项目根目录开始写,我的static存放位置不是直接在项目根目录
如果直接在项目根目录下建static文件夹,写成
re_path(r'^/static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),
4.3html文件
见本文第一条
五、几个注意点
1、本地修改的文件,要同步到服务器
2、本地文件夹目录,要与服务器一致
3、注意配置文件中标点符号使用半角
4、本地资源显示不出来,先看单独文件路径能否访问,再看静态引用是否正常
参考文献:
Django 模板加载静态文件
使用uWSGI提供静态文件 (更新至1.9)
https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/StaticFiles.html
超详细的django1.8处理centos下nginx上处理静态文件步骤!
nginx配置访问本地静态资源
nginx location配置详细解释