Django之静态文件及模板语法(上)

Python学习之路系列文章目录



  1. python面向对象之警察与匪徒火拼场景模拟
  2. python面向对像之第二次笔记
  3. Django环境搭建及测试
  4. 第1个Django应用及Django的请求处理
  5. Django之静态文件及模板语法(上)

---

静态文件及模板语法

  • Python学习之路系列文章目录
  • 一、静态文件
    • 1.1 多个页面
    • 1.2 templates模板
    • 1.3 静态文件
    • 1.4 引用静态文件
  • 总结

---

一、静态文件

1.1 多个页面

	- url -> 函数- 函数

通过配置URL路由,将不同的URL与相应的视图函数关联起来,当用户访问特定URL时,Django将调用相应的视图函数,并返回该视图函数处理后的页面内容给用户。

# urls.py
urlpatterns = [path('admin/', admin.site.urls),path('index/', views.index),path('login/', views.login),path('personal/', views.personal)
]
# Create your views here.def index(request):return HttpResponse("Hello, world. You're at the")def login(request):return HttpResponse("登录")def personal(request):return HttpResponse("个人中心")

来看效果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.2 templates模板

Django中 ,模板( Templates )是用来生成页面的文件,它们使用Django模板语言(DTL)编写,可以包含HTML、CSS、JavaScript以及Django模板标记。模板允许您动态地插入数据,并在渲染过程中生成最终的HTML页面。

以下是创建和使用模板的基本步骤:

  1. 创建模板文件夹:在您的Django应用程序目录中创建一个名为templates的文件夹。Django将在这个文件夹中查找模板文件。

  2. 编写模板文件:在 templates 文件夹中创建模板文件。这些文件将使用 HTML 和 Django 模板语言编写,可以包含动态数据和模板标记。例如,您可以创建一个名为 index.html 的模板文件,其中包含以下内容:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Home Page</title>
</head>
<body><h1>Welcome to our website!</h1><p>Hello, {{ user.username }}!</p>
</body>
</html>

在这个例子中,{{ user.username }}是一个模板变量,它将在渲染模板时由视图函数传递过来的数据填充。

  1. 加载模板:在视图函数中加载并渲染模板。在视图函数中使用render()函数来加载模板并渲染它。例如:
from django.shortcuts import renderdef home(request):user = {"username": "administrator"}  # 假设您有一个用户对象return render(request, 'index.html', {'user': user})

在这个例子中,我们将user对象传递给模板,并在模板中使用它。

  1. 配置模板路径:确保在Django的设置文件中配置了正确的模板路径。默认情况下,Django会在每个应用程序的templates文件夹中查找模板文件,但您也可以在设置中配置其他模板路径。

在这里插入图片描述

效果如下:

在这里插入图片描述

1.3 静态文件

在Django中,静态文件通常包括 CSS样式表JavaScript脚本图像文件 等,它们用于呈现网站的外观和行为。

下面是关于Django静态文件的一些重要概念和用法:

  1. 静态文件目录结构
    默认情况下,Django项目会创建一个名为static的目录,用于存放静态文件。这个目录通常位于你的项目根目录下。你可以在settings.py中使用STATICFILES_DIRS设置自定义的静态文件目录。

    例如,如果你有一个名为static_files的目录,并希望将其包含在静态文件查找中,可以添加以下设置:

    STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_files'),
    ]
    

    最后,在部署时,你还需要设置STATIC_ROOT来指定静态文件的收集目录。例如,可以将STATIC_ROOT设置为os.path.join(BASE_DIR, 'static')

    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    然后,运行python manage.py collectstatic命令来收集静态文件到指定的目录中。这样,静态文件就可以通过STATIC_URL指定的URL路径访问了。

  2. 收集静态文件
    在部署Django项目时,你通常会将静态文件收集到一个单独的目录中,以便Web服务器能够提供这些文件。你可以使用collectstatic命令来收集静态文件。例如:

    python manage.py collectstatic
    
  3. 静态文件URL配置
    在Django的settings.py文件中,STATIC_URL是用来配置静态文件URL路径的设置。默认情况下,这个设置是'static/',表示静态文件的URL路径为/static/

    你可以将这个设置修改为你想要的静态文件URL路径。例如,如果你希望静态文件的URL路径为 /assets/ ,可以将 STATIC_URL 设置为 assets/

    STATIC_URL = 'assets/'
    

    请注意,STATIC_URL 只是用于指定静态文件的URL前缀,它不会影响静态文件在服务器上的存储位置。静态文件的实际存储位置由STATICFILES_DIRSSTATIC_ROOT设置决定。

  4. 模板中的静态文件引用
    在模板中,你可以使用{% static %}模板标签来引用静态文件。例如:

    <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
    <script src="{% static 'js/script.js' %}"></script>
    
  5. 静态文件的版本控制
    在生产环境中,为了避免浏览器缓存旧的静态文件,你可以考虑在静态文件URL中添加版本号或哈希值。Django内置了 static 模板标签来处理这个问题。例如:

    <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}?v={{ STATICFILES_VERSION }}">
    
  6. 静态文件处理器
    Django通过静态文件处理器(static file handlers)来处理静态文件的收集和提供。这些处理器可以压缩、合并或转换静态文件,以便在生产环境中提高性能。你可以在 settings.py 中配置这些处理器。

1.4 引用静态文件

在Django模板中引用静态文件非常简单,你可以使用 {% static %} 模板标签来引用静态文件。

例如:

  1. 引用CSS文件

    <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
    
  2. 引用JavaScript文件

    <script src="{% static 'js/script.js' %}"></script>
    
  3. 引用图像文件

    <img src="{% static 'images/logo.png' %}" alt="Logo">
    

在模板中,{% static %} 标签将被替换为静态文件的实际 URL 路径,这样浏览器就可以正确加载这些文件了。

请确保在引用静态文件时使用正确的文件路径。如果你的静态文件在STATICFILES_DIRS 中的子目录中,你需要包括子目录的路径。如果你的静态文件已经被收集到 STATIC_ROOT 目录中,那么你只需要指定文件名即可。

另外,请确保您的静态文件位于静态文件目录中,并且已经收集到了 STATIC_ROOT 目录中(如果在生产环境中使用)。

注意:

在模板中使用静态文件时需要加载 {% load static %} 模板标签。这个模板标签用于加载 Django 的静态文件处理器,使得你可以在模板中使用 {% static %} 模板标签来引用静态文件。

并且请确保 {% load static %} 标签在您使用 {% static %} 标签之前进行加载,以便正确使用静态文件的路径。如果您忘记加载静态文件处理器,模板将无法识别 {% static %} 标签,并且无法正确解析静态文件的URL路径。

所以一般放在开头:

{% load static %}
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>index首页</title><link rel="stylesheet" href="{% static 'css/clock.css' %}"/>
</head><body>
<div class="box"><div id="HH">00</div><div>:</div><div id="mm">00</div><div>:</div><div id="ss">00</div>
</div><script src="{% static 'js/clock.js' %}"></script>
</body></html>
html,body {margin: 0;padding: 0;height: 100%;background-image: linear-gradient(to bottom right, red, gold);}.box {width: 400px;height: 250px;background-color: rgba(255, 255, 255, 0.6);border-radius: 6px;position: absolute;left: 50%;top: 40%;transform: translate(-50%, -50%);box-shadow: 1px 1px 10px #fff;text-shadow: 0px 1px 30px white;display: flex;justify-content: space-around;align-items: center;font-size: 70px;user-select: none;padding: 0 20px;/* 盒子投影 */-webkit-box-reflect: below 0px -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0%, transparent), to(rgba(250, 250, 250, .2)));}
window.onload = function () {// 定时器,每隔 1 秒执行 1 次setInterval(() => {var dt = new Date()var HH = dt.getHours()var mm = dt.getMinutes()var ss = dt.getSeconds()// 为页面上的元素赋值document.querySelector('#HH').innerHTML = padZero(HH)document.querySelector('#mm').innerHTML = padZero(mm)document.querySelector('#ss').innerHTML = padZero(ss)}, 1000)}// 补零函数function padZero(n) {return n > 9 ? n : '0' + n}

在这里插入图片描述

效果:

在这里插入图片描述

------

总结

这个作者很懒,总结交给各位啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/799328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLite 4.9的虚拟表机制(十四)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite 4.9的 OS 接口或“VFS”&#xff08;十三&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 1. 引言 虚拟表是向打开的 SQLite 数据库连接注册的对象。从SQL语句的角度来看&#xff0c; 虚拟表对象与任何其他…

软考高级:计算机网络概述

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

数据库相关知识总结

一、数据库三级模式 三个抽象层次&#xff1a; 1. 视图层&#xff1a;最高层次的抽象&#xff0c;描述整个数据库的某个部分的数据 2. 逻辑层&#xff1a;描述数据库中存储的数据以及这些数据存在的关联 3. 物理层&#xff1a;最低层次的抽象&#xff0c;描述数据在存储器中时如…

五一假期来临,各地景区云旅游、慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算&#xff0c;今年清明节假期3天全国国内旅游出游1.19亿人次&#xff0c;按可比口径较2019年同期增长11.5%&#xff1b;国内游客出游花费539.5亿元&#xff0c;较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…

Taro打包生成不同目录

使用taro init创建taro项目时&#xff0c;taro默认打包目录是&#xff1a; /config/index.js outputRoot:dist默认的目录&#xff0c;编译不同平台代码时就会覆盖掉&#xff0c;为了达到多端同步调试的目的&#xff0c;这时需要修改默认生成目录了&#xff0c;通过查看官方文…

【LeetCode】排序数组——不一样的方式实现快排

目录 题目链接 颜色分类 算法原理 代码实现 排序数组 算法原理 代码实现 最小的k个数 算法原理 代码实现 题目链接 LeetCode链接&#xff1a;75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; LeetCode链接&#xff1a;912. 排序数组 - 力扣&#xff08;L…

docker 部署 Epusdt - 独角数卡 dujiaoka 的 usdt 支付插件

部署 部署说明 部署之前必须注意的几点事项,该教程不一定适合所有用户: 本教程主要是使用 docker 部署,宝塔用户或宿主机直接安装的用户请直接参考官网教程.本教程是独立部署 epusdt,使用独立的mysql和redis,与dujiaoka项目分开. 在研究的过程中发现 epusdt 也需要用到 mys…

CADP加密系统的可扩展性和可定制性

CADP加密系统是一种专门用于保护CAD(计算机辅助设计)文件安全的加密解决方案。随着CAD技术在各个领域的广泛应用&#xff0c;CAD文件的安全性和保密性日益受到重视。CADP加密系统通过一系列先进的加密技术和安全措施&#xff0c;为CAD文件提供全面的保护&#xff0c;防止未经授…

ES入门十五:分页的三驾马车【from+size、search after、scroll api】

从数据集中获取数据时分页是绕不开的操作&#xff0c;一下子从数据集中获取过多的数据可能会造成系统抖动、占用带宽等问题。特别是进行全文搜索时&#xff0c;用户只关心相关性最高的那个几个结果&#xff0c;从系统中拉取过多的数据等于浪费资源。 ES提供了3种分页方式&…

Java | Leetcode Java题解之第15题三数之和

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> threeSum(int[] nums) {int n nums.length;Arrays.sort(nums);List<List<Integer>> ans new ArrayList<List<Integer>>();// 枚举 afor (int first 0;…

springboot整合ShardingSphere分库分表并插入1kw条记录

目录 一&#xff0c;数据分片 二&#xff0c;水平分片 三&#xff0c;创建数据库表 四&#xff0c;springboot项目导入依赖 五&#xff0c;创建类 六&#xff0c;bug bug放到最后了。 一&#xff0c;数据分片 数据分片指按照某个维度将存放在单一数据库中的数据分散地存…

每天学习一个Linux命令之curl

每天学习一个Linux命令之curl 在Linux系统中&#xff0c;有很多有用的命令可以帮助我们与网络进行交互。一个非常常用的命令是curl&#xff0c;它是一个功能强大的工具&#xff0c;可用于发送、接收和处理各种网络请求。本文将详细介绍在Linux下使用curl命令的各种选项及其用法…

如何理解图像处理领域的病态问题(ill-posed problem)

ill-posed problem&#xff0c;我们可以理解为病态问题或者不适定问题。在本文中&#xff0c;统一成为不适定问题。 在讨论不适定问题&#xff08;ill-posed problem&#xff09;之前&#xff0c;我们先来看一下什么叫适定性问题&#xff08;well-posed problem&#xff09;。…

如何明确的选择IT方向?

一、明确目标 作为初学者&#xff0c;先树立自己目标&#xff0c;找到自己感兴趣的IT行业&#xff0c;IT行业分很多种&#xff0c;听的最多次的无非不就是web前端工、程序员、后端、大数据、网络运维等。学习知识也是为了找到更好的工作&#xff0c;所以我建议先去boss直聘、五…

目标检测标签分配策略,难样本挖掘策略

在目标检测任务中&#xff0c;样本的划分对于模型的性能具有至关重要的影响。其中&#xff0c;正样本指的是包含目标物体的图像或区域&#xff0c;而负样本则是不包含目标物体的图像或区域。然而&#xff0c;在负样本中&#xff0c;有一部分样本由于其与正样本在特征上的相似性…

jest单元测试——项目实战

jest单元测试——项目实战 一、纯函数测试二、组件测试三、接口测试四、React Hook测试&#x1f4a5; 其他的疑难杂症另&#xff1a;好用的方法 &#x1f31f; 温故而知新&#xff1a;单元测试工具——JEST 包括&#xff1a;什么是单元测试、jest的基本配置、快照测试、mock函数…

「39」打造专业流畅的直播特效转场……

「39」工作室模式 打造专业流畅的直播特效转场体验 工作室模式是OBS软件里的一个特殊功能,用于后期直播过程中追求直播效果的用户,才会使用此功能。 该功能意在更加平滑,使用模板信息变化的过渡效果。主要用在赛事比分、活动抽奖、直播时需要经常更改的场景和内容,以及片…

Android 11属性系统初始化流程

在init进程启动的第二阶段&#xff0c;调用PropertyInit 对属性系统进行初始化 int SecondStageMain(int argc, char** argv) {//省略PropertyInit();//省略 }PropertyInit函数在system\core\init\property_service.cpp 中实现 void PropertyInit() {//省略mkdir("/dev/…

智能网联汽车自动驾驶数据记录系统DSSAD数据元素

目录 第一章 数据元素分级 第二章 数据元素分类 第三章 数据元素基本信息表 表1 车辆及自动驾驶数据记录系统基本信息 表2 车辆状态及动态信息 表3 自动驾驶系统运行信息 表4 行车环境信息 表5 驾驶员操作及状态信息 第一章 数据元素分级 自动驾驶数据记录系统记录的数…

【GameFi】 链游 | Brilliantcrypto点火活动

活动&#xff1a;https://app.galxe.com/quest/brilliantcrypto/GCt8wthq2J Brilliantcrypto点火活动正在Galxe上进行 &#x1f389; 活动时间&#xff1a;2024/04/06 12:00 ~ 2024/05/04 12:00 奖励总价值1200美元的MATIC 完成任务並在Brilliantcrypto Galxe Space上赚取积分。…