在一个网页中,不仅仅只有一个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. sqlserver 分页模糊查询

       积少成多 ----  仅以此致敬和我一样在慢慢前进的人儿 问题: 在sqlserver 进行模糊查询,出现问题 最初使用“concat”,进行拼串操作,如下所示: <select id = ...

  2. Maven 项目无法在Ecplise加进tomcat server

    当把用Maven项目 加进 tomcat server 时,出现 "There are no resources that can be added or removed from the ...

  3. Java 并发包中的高级同步工具

    Java 并发包中的高级同步工具 Java 中的并发包指的是 java.util.concurrent(简称 JUC)包和其子包下的类和接口,它为 Java 的并发提供了各种功能支持,比如: 提供了线 ...

  4. Flutter 入门 --- 内部分享

    八月部门给分配的分享任务,由于项目太赶,推迟一个月. 选 Flutter 这个主题,是因为现在它慢慢流行起来了,而我却不了解,故而借此契机,上手试试. 简介 Flutter 是 Google 推出的跨 ...

  5. ROS中3D机器人建模(五)

    一.创建一个差速驱动移动机器人模型 前面我们已经创建了一个7-DOF机械臂机器人模型,接下来我们将创建一个差速机器人模型,差速轮式机器人在机器人底盘的两端安装两个轮子, 整个底盘由一个或两个脚轮支撑. ...

  6. AI: 绘制图标的实例

    AI绘制矢量电影图标 http://www.fevte.com/tutorial-2299-1.html AI绘制水晶质感QUICKTIME图标 http://wenku.baidu.com/view ...

  7. CCF_201604-4_游戏

    bfs,首先记录危险方格的时间,因为100时间之后,所有方格均不危险,所以最短时间的最大值为300,记录每个坐标每个时间的状态,直接bfs即可. #include<cstdio> #inc ...

  8. tensorflow variable scope 变量命名空间和变量共享

    import tensorflow as tf def f(): var = tf.Variable(initial_value=tf.random_normal(shape=[2])) return ...

  9. HDU_5456_数位dp

    http://acm.hdu.edu.cn/showproblem.php?pid=5456 转化成a=b+c,dp[i][a][b][c]表示剩余i木棒,a是否有进位,b是否首尾,c是否首位,注意每 ...

  10. Windows系统-cmd中的tracert命令

    大部分同学都是用的Linux系统来测试网络命令相关工具,我用Windows10系统来测试tracert.        tracert:也被称为Windows路由跟踪实用程序,在命令提示符(cmd)中 ...