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,一经查实,立即删除!

相关文章

java面试题(5)|Java 中 throw 与 throws 的区别是什么?

在Java中&#xff0c;throw和throws是两个关键字&#xff0c;它们用于异常处理&#xff0c;但在语法和作用上有所不同&#xff1a; throw&#xff1a; throw 关键字用于在代码块中抛出一个异常对象。当某个条件发生时&#xff0c;你可以使用 throw 关键字手动抛出一个异常&am…

【面经】2024春招-软件开发工程师-后端方向1

面经整理系列&#xff1a; 【面经】软件开发工程师-后端方向1 文章目录 岗位与面经基础1&#xff1a;数据库 & 网络基础2&#xff1a;系统 & 语法模板3&#xff1a;算法 & 项目 岗位与面经 岗位介绍 JD: 美团-软件开发工程师-后端方向-1小时左右 金融服务平台 技…

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

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

【uniapp小程序-跳转另一个小程序】

https://blog.csdn.net/m0_61702149/article/details/126145953 不传参的情况写法&#xff0c;上面的链接包含传参的写法 在当前小程序在pages.json写上 要跳转的小程序的id "navigateToMiniProgramAppIdList":["要跳转的小程序的appid"] 小程序A到B&#…

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

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

数据库相关知识总结

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

JavaScript之作用域链详解

在JavaScript中&#xff0c;作用域链是一个重要的概念&#xff0c;它决定了变量和函数的可访问性。作用域链是由变量对象的列表组成&#xff0c;这些变量对象按照它们被创建的顺序排列。本文将详细介绍JavaScript作用域链&#xff0c;包括什么是作用域链、作用域链的创建过程、…

运行pytorch作业出现错误 RuntimeError: unable to write to file

运行pytorch作业出现错误 RuntimeError: unable to write to file Issue #26 huaweicloud/dls-example GitHub pytorch将共享内存的临时文件保存在了/torch_xxx文件中&#xff0c;即容器中的根目录下。容器磁盘空间不足导致该问题的发生。目前可以通过以下代码暂时关闭pyto…

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

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

关于c++的命名空间

目录 1.命名空间 &#xff08;1&#xff09;hello world (2)细讲hello world代码 &#xff08;3&#xff09;引用命名空间 &#xff08;4&#xff09;总结代码 2.自定义一个命名空间 1.命名空间 &#xff08;1&#xff09;hello world #include<iostream> using n…

ubuntu安装与卸载Nvidia驱动,anaconda,vscode,remote远程配置

开始装nvidia 驱动之前先配置nouveau 文件 参考 https://blog.csdn.net/qq_40907977/article/details/115305634 1. 删除原有驱动 sudo apt-get purge nvidia* sudo apt-get autoremove 2.安装依赖 sudo apt-get install build-essential gcc-multilib dkms 3.禁用nouvea…

Linux命令-dpkg-preconfigure命令(Debian Linux中软件包安装之前询问问题)

说明 dpkg-preconfigure命令 用于在Debian Linux中软件包安装之前询问问题。 语法 dpkg-preconfigure(选项)(参数)选项 -f&#xff1a;选择使用的前端&#xff1b; -p&#xff1a;感兴趣的最低的优先级问题&#xff1b; --apt&#xff1a;在apt模式下运行。参数 软件包&am…

AI技术创业机会之教育科技

教育科技领域正因人工智能(AI)技术的创新与发展而焕发全新活力,为创业者开辟了众多革新教育模式、提升教学效果的创业机会。以下详述了教育科技中AI技术的具体创业机会及其细节与内容,以助力有志于投身此领域的创业者全面了解市场前景与潜在机遇。 一、个性化学习平台 1.…

Taro打包生成不同目录

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

蓝桥杯练习题 —— 阶乘计算(python)

python优势 # encoding utf-8 # 开发者&#xff1a;xxx # 开发时间&#xff1a; 21:57 # "Stay hungry&#xff0c;stay foolish."n int(input()) res 1 for i in range(n):res res * (i1)print(res) 正常算法 # encoding utf-8 # 开发者&#xff1a;xxx # 开…

【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;防止未经授…

微信小程序脚本的执行顺序

在小程序中的脚本执行顺序和浏览器中有所不同。 小程序的执行的入口文件是 app.js 。 并且会根据其中 require 的模块顺序决定文件的运行顺序&#xff0c;代码是一个 app.js 示例。 app.js /* a.js console.log(a.js) */ var a require(./a.js) console.log(app.js)/* b.js co…

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

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