在一个网页中,不仅仅只有一个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. 导出表格数据到excel并下载(HSSFWorkbook版)

    这里主要前面是通过一个全局变量,在layui的done回调里拿到数据,然后将该数据导出到excel,这里要注意一点,下载excel不能用ajax方式,如果采用ajax下载默认会读取response返回 ...

  2. 啥?你想diy一个智能音箱,来吧

    没错,这是智zhang语音助手 本系统基于自美系统二次开发,添加连接EMQ服务器,语音远程控制LED(Nodemcu),当然也可以扩展控制更多的设备,只需要将下位机设备连接到EMQ服务器即可. 由于使 ...

  3. JSP&Servlet学习笔记----第3章

    Web容器是JSP/Servlet唯一认识的HTTP服务器. HTTP是基于请求/响应的无状态通信协议. 流程: 1.请求来到HTTP服务器 2.HTTP服务器将请求转交给Web容器 3.Web容器创 ...

  4. 【WPF学习】第三十九章 理解形状

    在WPF用户界面中,绘制2D图形内容的最简单方法是使用形状(shape)——专门用于表示简单的直线.椭圆.矩形以及多变形的一些类.从技术角度看,形状就是所谓的绘图图元(primitive).可组合这些 ...

  5. Oracle操作语句--增加/删除

    1.删除1980年雇员的雇员信息: delete  from myemp where     hiredate between to_date('1980-1-1','yyyy-mm-dd') and ...

  6. PostMan向企业微信机器人传送数据测试

    1 在企业微信中创建机器人  获取:webhook 地址 2.在Postman软件中创建Post文件 Post文件请求类型要与机器人所接受的类型一致.Get  或者 Post Url地址为上面webh ...

  7. POJ_3450_KMP

    http://poj.org/problem?id=3450 直接暴力枚举第一行的每一个字串,在下面的字符串中查找就行了,注意不符合就及时break. 然后试了一下strstr,发现效率是KMP的3- ...

  8. Grafana & Graphite & Collectd:监控系统

    简介 监控是运维工作中的一个重要组成部分,今天介绍一套新的监控工具,方便好用,扩展性强,这套工具有三个组件,Grafana & Graphite & Collectd: Grafana ...

  9. IniRealm讲解

    Shiro自定义Realm 内置Realm: user.ini [users] Mark=123456,admin [roles] admin=user:delete,user:update IniR ...

  10. Redis Cluster 集群扩容与收缩

    http://blog.csdn.net/men_wen/article/details/72896682 Redis 学习笔记(十五)Redis Cluster 集群扩容与收缩 标签: redis集 ...