添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我最近在琢磨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

希望本文对大家有所帮助!

笔者也只是一名学生,如果出错了,欢迎指正,也欢迎与我讨论!

本文详细解释了django中的collectstatic命令以及STATIC_URL、STATIC_ROOT的配置,解决了django从哪里收集静态文件问题。此外,还详细说明了静态文件路径、静态文件目录的设置及其作用。如果你对STATICFILES_DIRS有疑问,不知道有什么,这篇文章可以给你答案。模板标签static的作用和用法在此也进行了介绍。怎么部署静态文件、怎么管理静态文件,静态文件要放在哪里?看这一篇就够了。 python -m venv .venv 在Windows: .venv\Scripts\activate 在Ubuntu: source .venv\Scripts\activate 安装依赖项 pipenv install 创建文件.env 定义SECRET_KEY和DEBUG python manage.py makemigrations python manage.py migrate 生成静态文件 python manage.py collectstatic 运行应用程序 python manage.py runserver 支持的存储后端 storages.backends.s3boto3.S3Boto3Storage storages.backends.gcloud.GoogleCloudStorage django.core.files.storage.FileSystemStorage 随着越来越多的文件添加到项目,运行Djangocollectstatic命令可能会变得非常缓慢,尤其是当源代码包含诸如jQuery UI之类的繁重库时。 Collectfast自定义内置的coll 将到Django Admin或自定义表单django-pagedown > = 2.0.0版本需要Django 2.1.0或更高版本(以前的版本应一直支持Django直至1.1左右)。 获取代码: pip install django-pagedown 将pagedown.apps.PagedownConfig添加到您的INSTALLED_APPS 收集静态文件: python manage.py collectstatic 该小部件既可以在django管理员内部使用,也可以独立使用。 在Django Admin内部: 如果要在django admin字段使用pagedown编辑器,可以采用多种方法: 要在您的管理表单的所有TextField使用它,请执行以下操作: from django . contrib import admin from django . db import models from pagedown . widgets import AdminPagedownWidget class Alb
在一个网页,不仅仅只有一个html骨架,还需要css样式文件,js执行文件以及一些图片等。因此在DTL加载静态文件是一个必须要解决的问题。在DTL,使用static标签来加载静态文件。要使用static标签,首先需要{% load static %}。 加载静态文件的步骤如下: 首先确保django.contrib.staticfiles已经添加到settings.INSTALLED_APPS。 确保在settings.py设置了STATIC_URL。 注意: 上面两条都是在创建Django 项目的时候就自动给我们弄好了,只要我们没有去改动它,就不用管。 在已经安装了的app下创建一
目录1. Djangocollectstatic命令2.静态文件的访问 1. Djangocollectstatic命令 理解这条命令的前提是,要知道什么是 app ,app 内也可以有 static 文件夹 / 目录,和 Django 项目的原始文件一样。 一开始 static 文件夹 / 目录,是不存在的需要自己创建的,所以当 有多个 app ,且这些 app 文件夹内各自有一个 static 文件夹 / 目 录,那么可以利用 collectstatic 收集 静态文件内的所有文件 到指定 文件
我最近在琢磨django框架的使用,在上传个人网站服务器上时,再次遇到了找不到静态文件,css、img等样式全无的问题。于是沉下心来,好好研究了django静态文件到底应该怎么去部署(deploy),一点心得体会现分享于下。 1.python manage.py collectstatic做了什么 Collects the static files into STATIC_ROOT. 翻译:把静态文件收集STATIC_ROOT。 以上是官方文档的简述。 当然你肯定会问,从哪里. 我最近在琢磨django框架的使用,在上传个人网站服务器上时,再次遇到了找不到静态文件,css、img等样式全无的问题。于是沉下心来,好好研究了django静态文件到底应该怎么去部署(deploy),一点心得体会现分享于下。 1. python manage.py collectstatic做了什么 Collects the static files into STATIC_ROOT. 翻译:把静态文件收集STATIC_ROOT。 以上是官方文档的简述。 当然你肯定会问,从哪里收集这些 版权声明:无论原创随意转载 https://blog.csdn.net/zahuopuboss/article/details/53854649 python manage.py collectstatic django.core.... Think_Walker: 我感觉是,在本地运行Django时,有自己的静态文件系统(比如每个application里的static文件夹),但是到线上后,nginx会接管这一系统。这时需要将所有的静态文件统一起来管理。python manage.py collectstatic将静态文件收集到mysite/setting.py的STATIC_ROOT里面,而nginx中(/etc/nginx/nginx.conf)也定义了访问静态文件的路径: [code=python] location /static { alias /home/mysite/static; [/code] STATIC_ROOT和alias相一致,应该就可以访问到静态文件了,也包括CSS和JS文件。此外,HTML里的{% load static %}应该也可以正常使用了。 详解django中的collectstatic命令以及STATIC_URL、STATIC_ROOT配置 并不明白python manage.py collectstatic能带来什么,以前运行起来后,依然无法访问到CSS和JS渲染效果。 使用uwsgi和nginx搭建的服务器,修改代码后如何自动/手动重载代码? 不乖_cc: 逻辑清晰,解决了我的问题。谢谢 请问为什么 py-autoreload = 1 不建议在正式版本中使用吗?是为了效率起见,还是安全问题呢 详解django中的collectstatic命令以及STATIC_URL、STATIC_ROOT配置 JAY_jzj: 我在使用 python manage.py collectstatic 的时候,STATIC_ROOT中只有admin的样式,自己在项目目录中建立的static,这是建立的公共静态文件。目录中的静态文件都没有收集到。这是为什么呢?很苦恼。