在一个网页中,不仅仅只有一个html骨架,还需要css样式文件,js执行文件以及一些图片等。因此在DTL中加载静态文件时一个必须要解决的问题。在DTL中,使用static标签来加载静态文件。要使用static标签,首先需要{{% load static %}},加载静态文件的步骤如下:
  1. 首先确保django.contrib.staticfiles,已经添加到settings.py中的INSTALLED_APPS中。
  2. 确保在settings.py中设置了STATIC_URL
# Static files (CSS, JavaScript, Images)

STATIC_URL = '/static/'
  1. 在已经安装的app下创建一个文件夹叫做static,然后再在这个static文件夹下创建一个当前app的名字的文件夹,再把静态文件放到这个文件夹下。例如你的app叫做book,有一个静态文件hello.jpg,那么路径为book/static/book/hello.jpg
  2. 为什么要在app下创建一个static文件夹,还需要在这个static下创建一个同app名字的文件夹?
原因是如果直接把静态文件放在static文件夹下,那么在模板加载静态文件的时候就是使用hello.jpg,词汇书如果在多个app中出现同名的静态文件hello.jpg,这个时候就会出现混淆,而在static文件夹下加了一个同名的app文件夹,在模板中加载的时候就是使用app/hello.jpg,这样就可以避免产生混淆。示例代码如下:
{# static并不是DTL模板中内置的标签,因此要想使用的的话,就先要进行加载load进来 #}
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href=" {% static 'css/index.css' %} ">
</head>
<body>
# 可以采用第一种方式进行获取,但是此时获取图片的路径如果发生了变化,就要多处修改,比较麻烦,
{#<img src="/static/logo.jpg" alt="">#}
# 所以推荐使用第二种,使用static标签进行动态获取静态文件
<img src="{% static 'front/logo.jpg' %}" alt="">
</body>
</html>
  1. 如果一些静态文件不和任何app相关,那么可以在settings.py中添加STATICFILES_DIRS,以后DTL模板,如果不能在已经安装了的app下的static文件夹中找到静态文件,就会在这个列表的路径static文件夹中查找静态文件,比如在settings.py文件夹中可以配置为:
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
  1. 在模板中使用load标签加载static标签,比如要加载项目的static文件夹下的css文件夹下的index.css的文件,那么示例代码如下:
    <link rel="stylesheet" href=" {% static 'css/index.css' %} ">
  1. 如果不想每次在模板中加载静态文件都使用load加载static标签,那么可以在settings.py中的TEMPLATES/OPTIONS添加“builtins”:['django.templatetags.static'],这样以后在模板中就可以直接使用static标签,而不用手动的load了。这种方法就可以将static变成django的一个内置的标签。示例代码如下:
'builtins':[
'django.templatetags.static'
],
  1. 如果没有在settings.INSTALLED_APPS中添加django.contrib.staticfiles。那么我们就需要手动的将请求静态文件的url与静态文件的路径进行映射了,示例代码如下:

from django.urls import path
from front import views
from book import views as book_views # 将静态文件的url与静态文件的路径进行拼接
from django.conf import settings
from django.conf.urls.static import static urlpatterns = [
path('', views.index, name = 'index'),
path('book/', book_views.book, name = 'book'),
] + static(settings.STATIC_URL,document_root = settings.STATICFILES_DIRS[0])
# 进行拼接的时候,static(url前缀(STATIC_URL),document_root(静态文件路径))

此时ctrl+shift+r刷新网页,同样可以加载静态文件(jpg图片、css文件):



41.Python中加载静态文件的更多相关文章

  1. Django模版中加载静态文件配置详解

    .settings.INSTALLED_APPS下添加:django.contrib.staticfiles .settings.py下添加:STATIC_URL = '/static/' . ()在 ...

  2. django加载静态文件

    在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件. js 执行文件以及一些图片等,因此在 DTL 中加载静态文件是一个必须要解决的问题.在 DTL 中,使用 static 标签来 ...

  3. 在seajs中使用require加载静态文件的问题

    注意,在seajs中使用require加载静态文件时,必须使用常量,不能用变量.如果一定要用变量,请使用require.async var html = require("view/sys/ ...

  4. easyui datagrid 加载静态文件中的json数据

    本文主要介绍easyui datagrid 怎么加载静态文件里的json数据,开发环境vs2012, 一.json文件所处的位置 二.json文件内容 {"total":28,&q ...

  5. flask模板应用-加载静态文件:添加Favicon,使用CSS框架,使用宏加载静态资源

    加载静态文件 一个Web项目不仅需要HTML模板,还需要许多静态文件,比如CSS.JavaScript文件.图片和声音声.在flask程序中,默认需要将静态文件存储在与主脚本(包含程序实例的脚本)同级 ...

  6. springmvc 加载静态文件失败

    header.jsp,部分代码 <head> <title>QA|VIS_PLATFORM</title> <meta content="width ...

  7. worker中加载本地文件报错的解决方案

    如果在一个swf的主线程中加载文件时,报安全沙箱的错误, 网上有诸多的解决方案.但是如果在一个worker中加载本地文件报类似如下的错误: *** 安全沙箱冲突 *** SecurityError: ...

  8. 转 Velocity中加载vm文件的三种方式

    Velocity中加载vm文件的三种方式   velocitypropertiespath Velocity中加载vm文件的三种方式:    方式一:加载classpath目录下的vm文件 Prope ...

  9. Velocity中加载vm文件的三种方式

    Velocity中加载vm文件的三种方式: a.  加载classpath目录下的vm文件 /** * 初始化Velocity引擎 * --VelocityEngine是单例模式,线程安全 * @th ...

随机推荐

  1. CDH 离线安装 CM

    CDH支持Yum包,Tar包,RPM包,Cloudera Manager(CM)四种安装方式 Cloudera Manager(CM) 用于CDH集群管理,可进行节点安装,配置,服务管理等,提供Web ...

  2. Java 中的运算符和流程控制

    Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...

  3. HTML简介介绍

    网页概述 网页:纯文本格式的文件:(以村文本格式编写,后缀名改为HTML的文本文件) ---- 网站:多个网页的集合: ---- 主页:打开网站后显示的第一个页面: ---- 浏览器:将纯文本格式的文 ...

  4. MySQL物理物理备份与还原工具xtraBackup

    (一)xtraBackup简介 xtraBackup是Percona公司开发的一款MySQL数据库备份软件,在备份模式中属于物理备份.其显著特点是开源.免费.备份执行过程中不会阻塞事物.备份可压缩.支 ...

  5. IntelliJ IDEA 2020 的Debug功能也太好用了,真香!

    写在前边 作为一个有点强迫症的程序员来说,所有的应用软件.开发工具都必须要升级到最高版本,否则就会很难受到坐立不安.日思夜想.茶饭不思.至于什么时候得的这种病我也记不清了,哈哈哈 IntelliJ I ...

  6. 创建一个圆类Circle的对象,分别设置圆的半径计算并分别显示圆半径、圆面积、圆周长。

    编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型): // 存放圆的半径: ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) ...

  7. Codeforces_429_B

    http://codeforces.com/problemset/problem/429/B 挺简单的题,先求出四个点到每一点的最大和,然后枚举每一点,取和最大值. 注意两条路相交的点有且只有一个,这 ...

  8. PTA 7-10 树的遍历(二叉树基础、层序遍历、STL初体验之queue)

    7-10 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数 ...

  9. YUM源部署和使用

    1.前言 为什么需要内部yum源呢,有可能是业务内部的服务器对外是不通了,居于一些安全方面的考虑.内部yum源又有什么好处呢,第一,速度快:第二,内网可控,外网有问题也不影响内网包的下载和安装等. 2 ...

  10. 【阿里云IoT+YF3300】14.阿里IoT Studio打造手机端APP

    在上一篇<13.阿里云IoT Studio WEB监控界面构建>中,我们介绍了用阿里云IoT Studio(原Link Develop)可视化构建WEB界面程序.本篇文章将介绍用阿里云Io ...