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的使用相关推荐
- django中collectstatic的使用(亲测)
前言 我最近在琢磨django框架的使用,在上传个人网站服务器上时,再次遇到了找不到静态文件,css.img等样式全无的问题.于是沉下心来,好好研究了django的静态文件到底应该怎么去部署(depl ...
- openmvide使用需要什么插件_在Django中使用Webpack:再也不需要插件了!
这篇文章将会学习如何在Django中以最小的代价安装Webpack.这个问题常规的解决办法是使用django-webpack-loader,但是在我看来这种方式代价太大.这篇文章的目的是提供一个在Dj ...
- Django中的app
Django中的app 一.创建app应用 1.创建app应用的目的:当项目足够大时,例如路由或者静态文件.模板都写在了一起,比较臃肿,因此,我们可以创建app应用进行独立开发(分模块开发) 2命令行 ...
- 如何在Django中接收JSON格式的数据
Django做了大量工作简化我们的Web开发工作, 这其中当然也包括接收来自客户端的数据这一普遍需求. 大部分时候,从客户端传入的数据主要是FORM的POST数据,和来自URL的GET数据, 在Dja ...
- django中使用celery简单介绍
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 本章节我们重点在于实现,如何存储任务的结果. 我们将任务函数改为: from celery_demo.celery im ...
- Django中的Form
2019独角兽企业重金招聘Python工程师标准>>> 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django ...
- Windows下在Django中创建项目时ImportError: No module named django.core解决方法
Windows下在Django中创建项目时ImportError: No module named django.core解决方法 今天在对照<Python编程:从入门到实践>学## 标题 ...
- echarts导入mysql数据库_Echarts最新:Django中从mysql数据库中获取数据传到echarts方式_爱安网 LoveAn.com...
关于"Echarts"的最新内容 聚合阅读 这篇文章主要介绍了基于vue+echarts 数据可视化大屏展示的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...
- 在BAE搭建的Django中实现图片上传并用jquery预览图片
在BAE上搭建好了django,如何实现图片上传并预览呢? 想要实现图片上传并不难,但是想看到刚上传的图片,就得在服务器返回上传后图片的url.可是返回数据的话,网页就会重定向.因此想要在上传页面预览 ...
- web.py中实现类似Django中的ORM的查询效果
Django中的对象查询 Django框架自带了ORM,实现了一些比较强大而且方便的查询功能,这些功能和表无关.比如下面这个例子: class Question(models.Model):quest ...
最新文章
- 字符串截取固定长度的方法
- python如何自定义函数_python基础之函数(自定义函数)
- 局域网抓包分析工具_[源码和文档分享]基于Libpcap实现的局域网嗅探抓包发包解析工具...
- 邮箱解决任务间资源共享问题
- android 经纬度的范围内,在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内...
- Ubuntu中apt与apt-get命令的区别
- 语言孪生素数问题_刘建亚教授讲述“素数的故事”
- 开源 画图_[软件使用05] 快速使用 Deeptools 对 ChIP-seq 数据画图!
- css3为图片添加鼠标移入放大效果
- Unity基础知识结构总结
- java格斗代码_java学习2打架代码编写
- 树莓派——实时时钟模块(RTC)
- matlab的输出(命令窗口、fprint函数、disp函数)
- stm32单片机端口映射_STM32F103C8T6 can端口映射
- matlab插值与拟合例题_数学建模matlab插值与拟合
- 银行不良贷款很大一部分是诈骗的结果:CAG
- vue中事件监听watch
- python的基础讲解
- 关于“W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169”问题的解决
- drill down roll up
热门文章
- php mysql网站入侵_第一篇:PHP+MySQL injection攻击:浅谈网页安全
- mysql备份文件无法回退_mysql备份灵活恢复
- 十九、Oracle学习笔记:行变量
- Error: Could not open connection to jdbc:hive2://master:10000: java.net.ConnectException: Connection
- 阶段3 2.Spring_07.银行转账案例_6 测试转账并分析案例中的问题
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_5 Mybatis的CRUD-查询返回一行一列和占位符分析...
- PL/SQL developer连接远程ORACLE
- 【Android】怎样烧写qcn文件
- sql server dba
- php使用RabbitMQ