专栏首页菲宇Django的STATIC_ROOT和STATIC_URL以及STATICFILES_DIRS

Django的STATIC_ROOT和STATIC_URL以及STATICFILES_DIRS

首先,我们配置静态文件,要在setting.py里面加入如下几行代码: settings.py

# the settings above # STATIC SETTINGS STATIC_URL = '/static/' # BASE_DIR 是项目的绝对地址 STATIC_ROOT = os.path.join(BASE_DIR, 'collect_static') #以下不是必须的 STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'common_static'), )

1.STATIC_ROOT

STATIC_ROOT 是在部署静态文件时(pyhtonmanage.pycollectstatic)所有的静态文静聚合的目录,STATIC_ROOT要写成绝对地址,在这里,比如我的项目mysite是/home/mysite/ 那么STATIC_ROOT 为 /home/mysite/collect_static/ 当部署项目时,在终端输入:

python manage.py collectstatic django会把所有的static文件都复制到STATIC_ROOT文件夹下

2.STATICFILES_DIRS

STATIC_ROOT 是在部署的时候才发挥作用, 而实际情况下,静态文件的一般安放位置有两种:

1.一种就是在每个app里面新建一个static文件夹,将静态文件放到里面,在加载静态文件时,比如要在模板中用到静态文件,django会自动在每个app里面搜索static文件夹(所以,不要把文件夹的名字写错哦, 否则django就找不到你的文件夹了)

2.另一种,就是在所有的app文件外面,建立一个公共的文件夹, 因为有些静态文件不是某个app独有的,那么就可以把它放到一个公共文件夹里面,方便管理(注意,建立一个公共的静态文件的文件夹只是一种易于管理的做法,但是不是必须的,app是可以跨app应用静态文件的,因为最后所有的静态文件都会在STATIC_ROOT里面存在) 那现在的问题是如何让django知道你把一些静态文件放到app以外的公共文件夹中呢,那就需要配置STATICFILES_DIRS了

STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'common_static'), )

STATICFILES_DIRS告诉django,首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的static文件夹里面找(注意, django查找静态文件是惰性查找,查找到第一个,就停止查找了)

3.STATIC_URL

那么到此为止,静态文件的机制就可以运作了,但是有一个问题,我能不能通过url直接访问我在项目中的静态文件呢,答案肯定是啦,但是,注意,你是在浏览器是访问,你不可能输入你的静态文件的本地绝对地址吧,比如我的一种图片的本地地址为 /home/mysite/common_static/myapp/photo.png 那么别人不可能在浏览器上直接输入: http://127.0.0.1:8000/home/mysite/common_static/myapp/photo.png 这样子,浏览器会报错, 没有该页面 那么django是如何让浏览器也可以访问服务器上的静态文件呢,前面已经说了,直接访问服务器本地的地址是不行的,那就需要一个映射,django利用STATIC_URL来让浏览器可以直接访问静态文件,比如:

STATIC_URL = '/static/' 那么可以在浏览器上输入: http://127.0.0.1:8000/static/common_static/myapp/photo.png 那么就相当与访问/home/mysite/common_static/myap/photo.png

所以在浏览器上,利用前缀 STATIC_URL的具体内容,来映射STATIC_ROOT, http://127.0.0.1:8000/static 相当于 本地地址的STATIC_ROOT

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django之Admin文档生成器

    Django的admindocs应用可以从模型、视图、模板标签等地方获得文档内容。

    菲宇
  • Anaconda简介、安装、环境设置

    Anaconda 是一个包含数据科学常用包的发行版本。它基于 conda(一个包和环境管理器) 衍生而来。应用程序 conda 是包和环境管理器:

    菲宇
  • 系统部署和优化

    菲宇
  • Django静态文件详解

    Django通过django.contrib.staticfiles来管理静态文件。

    用户2936342
  • Flutter常用widget 'Row、Column'

    用于水平显示子项 A widget that displays its children in a horizontal array. 注:这个控件本身不可...

    坑吭吭
  • (93) 函数式数据处理 (下) / 计算机程序的思维逻辑

    上节初步介绍了Java 8中的函数式数据处理,对于collect方法,我们只是演示了其最基本的应用,它还有很多强大的功能,比如,可以分组统计汇总,实现类似数据库...

    swiftma
  • 故障分析 | MySQL TEXT 字段的限制

    项目中有一个数据交换的场景,由于使用了很多个 varchar(1000)、 varchar(2000),导致在创建表的时候,MySQL 提示:

    爱可生开源社区
  • C#开发代码规范中PascalCase和camelCase的两个有用的方法类

    近期为统一Oracle数据库下大写表名和字段,以及下划线_分隔符的特点,升级了旺财C#.NET代码生成器,将规范化的代码写了2个方法用于Camel和Pascal...

    崔文远TroyCui
  • 人工智能公司Next IT公司总裁Rick Collins:理解人工智能在企业中的角色

    过去几个月,机器人程序一直是在互联网上热议的话题。 微软、Facebook等科技业大公司都在向开发者开放了自己的人工智能平台。这些开放的工具和平台意味着,业界向...

    AI科技评论
  • 使用 Python 遍历目录树的方法

    假设有这样一个任务,希望对某个文件夹(包括所有子文件夹与文件)中的所有文件进行处理。这就需要遍历整理目录树, 处理遇到的每个文件。

    砸漏

扫码关注云+社区

领取腾讯云代金券