详解django中的collectstatic命令以及STATIC_URL、STATIC_ROOT配置

转:https://blog.csdn.net/weixin_36296538/article/details/83153070

前言我最近在琢磨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,#即未设置,我是自己配置成这样子的1234567python 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.txt1234567注意: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 collectstatic12最终项目文件结构的树状图如下:
├── manage.py├── polls│   ├── static│   │   ├── mystie_polls_static.txt├── static│   └── mysite_static.txt├── static_new│   ├── *admin│   ├── mysite_static.txt│   └── mystie_polls_static.txt#其中,admin是django自带的后台管理的静态文件1234567891011不出所料哈哈,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/‘1那么,在templates中,你可以通过模板标签static和给定的相对路径来构成一个URL,如下。
{% load static %}<img src="{% static "my_app/example.jpg" %}" alt="My image">12此时,构成的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————————————————版权声明:本文为CSDN博主「嘿嘿的客人」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_36296538/article/details/83153070

原文地址:https://www.cnblogs.com/CodingLife-190505/p/12273770.html

时间: 2024-07-31 15:37:38

详解django中的collectstatic命令以及STATIC_URL、STATIC_ROOT配置的相关文章

一张图详解Linux中的top命令

一张图详解Linux中的top命令及每个参数的含义:

详解MySQL中EXPLAIN解释命令

Explain 结果解读与实践 基于 MySQL 5.0.67 ,存储引擎 MyISAM . 注:单独一行的"%%"及"`"表示分隔内容,就象分开“第一章”“第二章”. explain 可以分析 select 语句的执行,即 MySQL 的“执行计划”: mysql> explain select 1; +----+-------------+-------+------+---------------+------+---------+------+----

详解linux中的ps命令

Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令. 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死.哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执

详解Linux中的cat文本输出命令用法

作系统 > LINUX > 详解Linux中的cat文本输出命令用法 Linux命令手册   发布时间:2016-01-14 14:14:35   作者:张映    我要评论 这篇文章主要介绍了Linux中的cat文本输出命令用法,是Linux入门学习中的基础知识,需要的朋友可以参考下 cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的.一.功能cat主要有三大功能:1.一次显示整个文件. 复制代码 代码如下: $ cat filename 2.从键盘创建一个文件. 复

实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)

在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然QuerySet的文档中已经详细说明了,但本文试图从QuerySet触发的SQL语句来分析工作方式,从而进一步了解Django具体的运作方式. 本来打算写成一篇单独的文章的,但是写完select_related()之后发现长度已经有点长了,所以还是写成系列,大概在两到三篇.整个完成之后将会在这里添加上

实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(三)

这是本系列的最后一篇,主要是select_related() 和 prefetch_related() 的最佳实践. 第一篇在这里 讲例子和select_related() 第二篇在这里 讲prefetch_related() 4. 一些实例 选择哪个函数 如果我们想要获得所有家乡是湖北的人,最无脑的做法是先获得湖北省,再获得湖北的所有城市,最后获得故乡是这个城市的人.就像这样: >>> hb = Province.objects.get(name__iexact=u"湖北省&

ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对比

ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间移动对象 3.可以在数据库之间移动对象 4.可以实现表空间转移 二.EXPDP的命令详解 C:\Users\Administrator>20:42:32.90>expdp help=y Export: Release 11.2.0.1.0 - Production on 星期六 10月 10 09

实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(二)

这是本系列的第二篇,内容是 prefetch_related() 函数的用途.实现途径.以及使用方法. 本系列的第一篇在这里 3. prefetch_related() 对于多对多字段(ManyToManyField)和一对多字段,可以使用prefetch_related()来进行优化.或许你会说,没有一个叫OneToManyField的东西啊.实际上 ,ForeignKey就是一个多对一的字段,而被ForeignKey关联的字段就是一对多字段了. 作用和方法 prefetch_related(

linux awk命令详解(都是常用命令)

原文:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它