前言

我最近在琢磨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二次编辑:当使用djangorunserver时,如果请求的是一个静态文件,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.txtmysite_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服务器的配置文件中定义/staticalias

此外,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的使用(亲测)相关推荐

  1. centos7.3部署django用uwsgi和nginx[亲测可用]

    centos7.3部署django用uwsgi和nginx[亲测可用] 现在nginx nginx version: nginx/1.10.2 uwsgi 2.0.17 django2.0.5 都已经 ...

  2. 在企业级案例中进阶excel资源-亲测十分有用

    在企业级案例中进阶excel资源-亲测十分有用 对于已入门Excel,但还不能用Excel熟练分析业务数据.高效使用的同学来说,是不错的进阶课程 这是一个以企业级案例为核心的课程.老师会在课程中演示案 ...

  3. Django项目遇到ImportError: cannot import name ‘url‘ from ‘django.conf.urls‘解决方法(亲测有效)

    文章目录 遇到问题 解决方法 参考 遇到问题 在开发django项目时,在urls.py文件中导入url时,遇到如下问题 from django.contrib import admin from d ...

  4. ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7

    2019独角兽企业重金招聘Python工程师标准>>> //获取通讯录中的所有属性,并存储在 textView 中,已检验,切实可行.兼容io6 和 ios 7 ,而且ios7还没有 ...

  5. Java List.size()方法:返回列表中元素的个数(亲测)

    Java 集合类中的 List.size() 方法以 int 形式返回列表中元素的个数. 语法: size() 返回列表中元素的个数.如果列表中元素的个数超过 2 147 483 647,则返回 2 ...

  6. idea中git打tag(亲测)

    打tag的目的就是给当前的代码版本做个标记,以便回出现问题能及时回退到此版本.极大减轻运维和研发的工作. 在此介绍如何利用在idea工具,git创建tag 一 创建tag 项目右键打开git(见下图) ...

  7. Comet4J推技术在SSHE三大框架中应用-linux下亲测可用

    Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询.长连接.自动选择三种工作模式. 下载地址 co ...

  8. Centos7中安装ElasticSearch7.2_亲测可用_坑很多---ElasticSearch工作笔记026

    之前用docker安装过,但是现在需要用了,从centos7上安装,费了写功夫,记录下来,方便自己和 他人以后再装的时候,有个参考 2.首先要安装虚拟机,我在VMware中安装的,过程中碰到了很多问题 ...

  9. 支付宝网站支付在微信浏览器中跳转问题(亲测,附源码)

    文章目录 前言 具体步骤 配置沙箱回调地址,修改代码支付宝网关 准备加密js以及跳转html 源码下载地址 前言 奉上整理好的测试url: 点我调用支付宝 之前的博客中提到了使用支付宝提供的sdk实现 ...

最新文章

  1. 传统编译器与神经网络编译器
  2. Git 2.25.0 发布,新特性:部分 clone 与稀疏 checkout
  3. CSS自学教程--一天搞定CSS(终篇总结)
  4. 【中级软考】函数参数传递传值与传引用的区别(global关键字,函数内定义全局变量)
  5. boost::container_hash模块实现哈希图
  6. python3将字符串unicode转换为中文
  7. STM32F105 PA9/OTG_FS_VBUS Issues
  8. 二维随机变量期望公式_概率论笔记-Ch4期望与方差
  9. Coolite Toolkit学习笔记一:AjaxEvent、AjaxMethod和Listeners
  10. Android消息推送(Android Push Notification)
  11. javaweb面试题目整理
  12. 龙之谷冰龙linux手工服务端,【网游】【龙之谷】v300冰龙巢穴一键服务端+客户端+GM工具+视频教程...
  13. 无线扫码枪 服务器查询异常,扫描枪常见问题
  14. 深度长文:NLP的巨人肩膀(上)
  15. zheng win 环境搭建
  16. 小球放入盒中的方法总结(排列组合)
  17. python判断一个月的天数_python日期列表中每个月的天数
  18. 解决Google浏览器卸载后无法重新安装的问题
  19. HTTP代理中的api 代理的使用方法有什么?
  20. Android Studio 学习实例记录-手电筒

热门文章

  1. cms java垃圾回收_java cms垃圾回收器总结
  2. html给网页加图片背景颜色,0035 如何设置网页背景图和在网页中插入图片
  3. 小知识点BeanUtils.copyProperties
  4. Linux下C语言执行过程(预处理,编译,汇编,链接,执行)
  5. 基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)
  6. 通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库)
  7. Mysql 8 group replication组复制集群单主配置图解
  8. 处理字符串_13_按照指定的分隔符截取字符返回表形式
  9. pythonpip安装与使用_Python pip 安装使用与问题
  10. 修罗武神正版游戏服务器,修罗武神正版游戏官网