django中collectstatic的使用(亲测)
前言
我最近在琢磨django框架的使用,在上传个人网站服务器上时,再次遇到了找不到静态文件,css、img等样式全无的问题。于是沉下心来,好好研究了django的静态文件到底应该怎么去部署(deploy),一点心得体会现分享于下。
1. python manage.py collectstatic
做了什么
Collects the static files into STATIC_ROOT.
翻译:把静态文件收集到 STATIC_ROOT中。
以上是官方文档中的简述。
当然你肯定会问,从哪里收集这些静态文件呢?
在回答这个问题前,我们先看一眼自己项目中的setting.py
文件:
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static/"),]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static_new/")
#其中STATIC_ROOT和STATICFILES_DIRS默认为None,
#即未设置,我是自己配置成这样子的
python manage.py collectstatic
在执行时,django
默认会去查看定义在STATICFILES_DIRS
里的目录,以及在INSTALLED_APPS
里定义了的app的static
目录。如果这些目录下有文件,则把文件全部收集起来,拷贝到STATIC_ROOT
目录下。[18.10.19二次编辑:当使用django
的runserver
时,如果请求的是一个静态文件,django也是会默认查看上述的ROOT、DIRS和static目录。但是,在部署到服务器上时,此规则就不使用了。]
这样说可能有点难懂,下面给出一个示例:
首先,以下是我的项目树形图,多余文件在此已被省略。
BASE_DIR
├── manage.py
├── polls
│ ├── static
│ │ ├── mystie_polls_static.txt
├── static
│ └── mysite_static.txt
注意:polls是我项目里的一个app!且已经添加到了INSTALLED_APPS中!
可以看到,我的项目下有static/mysite_static.txt
以及polls/static/mystie_polls_static.txt
,前者目录已经被写在STATICFILES_DIRS
中,后者的目录是app下的static目录,均符合静态文件的查找规则。
不难预想到,在执行collectstatic
后,mystie_polls_static.txt
和mysite_static.txt
文件都会被收集到STATIC_ROOT
中。
#在项目目录下执行
python manage.py collectstatic
最终项目文件结构的树状图如下:
├── manage.py
├── polls
│ ├── static
│ │ ├── mystie_polls_static.txt
├── static
│ └── mysite_static.txt
├── static_new
│ ├── *admin
│ ├── mysite_static.txt
│ └── mystie_polls_static.txt
#其中,admin是django自带的后台管理的静态文件
不出所料哈哈,django果然方便呀!我们以后很轻松就能把静态文件都收集到一起啦!
2. STATIC_URL
的作用
URL to use when referring to static files located in STATIC_ROOT.
Example: “/static/” or “http://www.example.com/static/”
翻译:STATIC_URL用于引用STATIC_ROOT所指向的静态文件。
举个栗子,在python manage.py runserver
后,我能够以http://localhost:8000/static/mystie_polls_static.txt为路径,访问到STATIC_ROOT下的静态文件。
但是,如果你使用了nginx
(或其他)服务器后,该规则就无效了。服务器会接管URL
匹配规则,你需要在nginx服务器的配置文件中定义/static
的alias
。
此外,STATIC_URL
还有一个作用,如下:
假定你的设置文件中有
STATIC_URL = '/static/'
那么,在templates
中,你可以通过模板标签static和给定的相对路径来构成一个URL,如下。
{% load static %}
<img src="{% static "my_app/example.jpg" %}" alt="My image">
此时,构成的URL为my_app/static/my_app/example.jpg
。
如果你在项目中用到了
static
这个模板标签,那一定要将nginx(或其他)服务器的/static
配置到与STATIC_ROOT一致!
依我愚见,这样做是有好处的。因为django不像php,只要将静态文件放置在.php
或者.html
同一目录下就好。
比如:<link rel="stylesheet" type="text/css" href="static/css/main.css">
,在django中挪进一个文件夹中就可能访问不到了。
这个时候static
标签就非常有用了;当然你也可以在uwsgi的配置中通过--check-static
和--static-map mountpoint=path
来解决这个问题。官方链接在此:https://uwsgi-docs.readthedocs.io/en/latest/StaticFiles.html
总结
希望本文对大家有所帮助!
笔者也只是一名学生,如果出错了,欢迎指正,也欢迎与我讨论!
来源:https://www.cnblogs.com/baby12138/p/10834067.html
django中collectstatic的使用(亲测)相关推荐
- centos7.3部署django用uwsgi和nginx[亲测可用]
centos7.3部署django用uwsgi和nginx[亲测可用] 现在nginx nginx version: nginx/1.10.2 uwsgi 2.0.17 django2.0.5 都已经 ...
- 在企业级案例中进阶excel资源-亲测十分有用
在企业级案例中进阶excel资源-亲测十分有用 对于已入门Excel,但还不能用Excel熟练分析业务数据.高效使用的同学来说,是不错的进阶课程 这是一个以企业级案例为核心的课程.老师会在课程中演示案 ...
- Django项目遇到ImportError: cannot import name ‘url‘ from ‘django.conf.urls‘解决方法(亲测有效)
文章目录 遇到问题 解决方法 参考 遇到问题 在开发django项目时,在urls.py文件中导入url时,遇到如下问题 from django.contrib import admin from d ...
- ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
2019独角兽企业重金招聘Python工程师标准>>> //获取通讯录中的所有属性,并存储在 textView 中,已检验,切实可行.兼容io6 和 ios 7 ,而且ios7还没有 ...
- Java List.size()方法:返回列表中元素的个数(亲测)
Java 集合类中的 List.size() 方法以 int 形式返回列表中元素的个数. 语法: size() 返回列表中元素的个数.如果列表中元素的个数超过 2 147 483 647,则返回 2 ...
- idea中git打tag(亲测)
打tag的目的就是给当前的代码版本做个标记,以便回出现问题能及时回退到此版本.极大减轻运维和研发的工作. 在此介绍如何利用在idea工具,git创建tag 一 创建tag 项目右键打开git(见下图) ...
- Comet4J推技术在SSHE三大框架中应用-linux下亲测可用
Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询.长连接.自动选择三种工作模式. 下载地址 co ...
- Centos7中安装ElasticSearch7.2_亲测可用_坑很多---ElasticSearch工作笔记026
之前用docker安装过,但是现在需要用了,从centos7上安装,费了写功夫,记录下来,方便自己和 他人以后再装的时候,有个参考 2.首先要安装虚拟机,我在VMware中安装的,过程中碰到了很多问题 ...
- 支付宝网站支付在微信浏览器中跳转问题(亲测,附源码)
文章目录 前言 具体步骤 配置沙箱回调地址,修改代码支付宝网关 准备加密js以及跳转html 源码下载地址 前言 奉上整理好的测试url: 点我调用支付宝 之前的博客中提到了使用支付宝提供的sdk实现 ...
最新文章
- 传统编译器与神经网络编译器
- Git 2.25.0 发布,新特性:部分 clone 与稀疏 checkout
- CSS自学教程--一天搞定CSS(终篇总结)
- 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)
- boost::container_hash模块实现哈希图
- python3将字符串unicode转换为中文
- STM32F105 PA9/OTG_FS_VBUS Issues
- 二维随机变量期望公式_概率论笔记-Ch4期望与方差
- Coolite Toolkit学习笔记一:AjaxEvent、AjaxMethod和Listeners
- Android消息推送(Android Push Notification)
- javaweb面试题目整理
- 龙之谷冰龙linux手工服务端,【网游】【龙之谷】v300冰龙巢穴一键服务端+客户端+GM工具+视频教程...
- 无线扫码枪 服务器查询异常,扫描枪常见问题
- 深度长文:NLP的巨人肩膀(上)
- zheng win 环境搭建
- 小球放入盒中的方法总结(排列组合)
- python判断一个月的天数_python日期列表中每个月的天数
- 解决Google浏览器卸载后无法重新安装的问题
- HTTP代理中的api 代理的使用方法有什么?
- Android Studio 学习实例记录-手电筒
热门文章
- cms java垃圾回收_java cms垃圾回收器总结
- html给网页加图片背景颜色,0035 如何设置网页背景图和在网页中插入图片
- 小知识点BeanUtils.copyProperties
- Linux下C语言执行过程(预处理,编译,汇编,链接,执行)
- 基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)
- 通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库)
- Mysql 8 group replication组复制集群单主配置图解
- 处理字符串_13_按照指定的分隔符截取字符返回表形式
- pythonpip安装与使用_Python pip 安装使用与问题
- 修罗武神正版游戏服务器,修罗武神正版游戏官网