当前位置: 首页 > news >正文

03_Django视图

三、Django模板

模板Templates

在Django框架中,模板是可以帮助开发者快速生成呈现给用户页面的工具

模板的设计方式实现了我们MVT中VT的解耦(M:Model,V:View,T:Template),VT有着N:M的关系,一个V可以调用任意T,一个T可以供任意V使用

模板处理分为两个过程

  • 加载HTML
  • 渲染数据 render()

模板主要有两个部分

  • HTML静态代码

  • 模板语言,动态插入的代码段(挖坑,填坑) {{ name }}

  • 模板中的动态代码段除了做基本的静态填充,还可以实现一些基本的运算,转换和逻辑

静态页面: 页面数据是本地固定的
动态页面: 页面数据来源于后台服务器

模板中的变量:视图传递给模板的数据,遵守标识符规则

​ 语法:{{ var }}
​ 如果变量不存在,则插入空字符串

方法不能有参数

​ {{ str }}

​ {{ str.upper }} # 不能带括号

​ {{ str.isdigit }}

​ {{ dict.key }}

列表,使用索引,不允许使用负索引

​ items = [‘apple’ ‘bananas’]

{{ items.1 }}

  • MVC软件设计模式: Model(数据库),View(界面),Controller(控制器,相当于Django的视图函数)
  • MVT : M:Model(数据库),V:View视图函数,T:Template(界面)

模板中的标签

语法: {{% tag %}}

作用:

  1. 加载外部传入的变量
  2. 在输出中创建文本
  3. 控制循环或逻辑
if 语句:格式: if单分支{% if表达式 %} 语句   {% endif %}if双分支{% if表达式 %} 语句 {% else %} 语句2  {% endif %}if多分支{% if表达式 %} 语句 {% elif表达式 %} 语句2 {% else %} 语句3 {% endif %}判断true或者false(可以使用and or not in,语法与python类似){% if tody_is_weekend %}\<p>Welcome to the weekend!!!\</p>{% endif %}使用 in 和 not in{% if user in users %}\<p>User已经存在</p>{% endif %}
for 语句{% for 变量 in 列表	%}语句1{% empty %}语句2{% endfor %}当列表为空或者不存在的时候,执行empty后的语句===================forloop.counter示例================={% forloop.counter %} 表示当前是第几次循环,从1开始
{% for item in todo_list %}<p> {{forloop.counter}} : {{ item }}	</p>
{% endfor %}{{ forloop.counter0 }}表示当前是第几次循环,从0开始{{ forloop.revcounter }}表示当前是第几次循环,倒着数数,到1停{{ for1oop.revcounter }}表示当前第几次循环,倒着数,到0停{{ forloop.first }}是否是第一个 布尔值{% for object in objects %}{% if forloop.first %}<li class="first">{{ object }}</li>{% else %}<li>{{ object }}</li>{% endif %}
{% endfor %}{% for link in links %}{{ link }}{% if not forloop.last %}|{% endif %}
{% endfor %}===================forloop.parentloop示例=================
{% for country in countries %}
<table>{% for city in country.city_list %}<tr><td>Country #{{ forloop.parentloop.counter }}</td><td>City #{{ forloop.counter }}</td><td>{{ city }}</td></tr>{% endfor %}
</table>
{% endfor %}
注释:单行注释{# 被注释掉的内容 #}多行注释{% comment %} 多行内容 {% endcomment %}
过滤器:{{ var|过滤器 }}作用: 在变量显示前修改add:{{ value|add:2 }}没有减法过滤器,但加法里可以加负数:{{ value|add:-2 }}
lower:{{ name|lower }}
upper:{{ my_list|fisrt|upper }} 将my_list的第一个值变成大写
截断:{{ bio|truncatechars:30 }}过滤器可以传递参数,参数需要使用引号引起来,比如join:{{ students|join:'=' }}默认值: default,格式{{ var|default:value }}如果变量没有被提供或者为False,空,会使用默认值根据指定格式转换日期为字符串,处理时间的就是针对date进行的转换{{ dateVal | date:'y-m-d'}}
HTML转义:将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的一个问题渲染成html:{{ code|safe }}
关闭自动转义 {% autoescape off %}code{% endautoescape %}
打开自动转义转义{% autoescape on %}code{% endautoescape %}
模板继承:block:{% block XXX %}code{% endblock %}extends 继承,写在开头位置{% extends'父模板路径'%}include:加载模板进行渲染{% include'模板文件'%}{{ block.super }}:获取父模板中block中的内容

在Django模板中使用jinja2模板引擎

Jinja2是之前我们在Flask框架讲过的一个模板引擎,是模仿Django默认模板引擎基础上开发的,比Django模板引擎性能更好,功能更全.

jinja2宣称比django默认模板引擎快10-20倍。Django也支持jinja2

1.安装jinja2模块
pip install jinja2
2.在settings.py所在的目录中创建jinja2_env.py文件,并写入以下内容
from django.templatetags.static import static
from django.urls import reverse
from jinja2 import Environmentdef environment(**options):env = Environment(**options)env.globals.update({'static': static,'url': reverse,})return env
3.修改项目的settings.py文件

原本的不能删除

TEMPLATES = [# 使用jinja2模板引擎{'BACKEND': 'django.template.backends.jinja2.Jinja2','DIRS': [],'APP_DIRS': True,'OPTIONS': {# 这里要添加environment变量,指向自定义的jinja2环境,DjangoPro2项目目录下的jinja2_env.py文件里面的environment函数"environment": "DjangoPro2.jinja2_env.environment",'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},# 原来自带的Django模板引擎{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]
4.在修改Pycharm中settings的模板语言为Jinja2

创建html文件,使用Jinja2语法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Jinja2模板语言</title>
</head>
<body><h2>Jinja2模板语言</h2><hr><p>name = {{ name }}</p>{% for n in name %}<b>{{n}}</b>{% endfor %}<hr>{% for n in name %}<div>{{loop.index}} : {{n}}</div>{% endfor %}{# Jinja2是可以使用带括号的函数调用的 #}{% for i in range(1, 10) %}<div>{{i}}</div>{% endfor %}</body>
</html>

注意: 这只是一个简单的Jinja2模板语法示例,要使用更多语法,可以查阅以下资料

  • 深入剖析Jinja2语法:高效开发的关键技巧_jinja2 函数-CSDN博客
  • 欢迎来到 Jinja2 — Jinja2 2.7 documentation

相关文章:

03_Django视图

三、Django模板 模板Templates 在Django框架中&#xff0c;模板是可以帮助开发者快速生成呈现给用户页面的工具 模板的设计方式实现了我们MVT中VT的解耦(M:Model&#xff0c;V:View&#xff0c;T:Template)&#xff0c;VT有着N:M的关系&#xff0c;一个V可以调用任意T&#xf…...

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件 在使用 Hugging Face 的数据集进行模型训练时&#xff0c;有时我们并不需要整个数据集&#xff0c;尤其是当数据集非常大时。为了节省存储空间和提高训练效率&#xff0c;我们可以从数据集中随机采样一部分数…...

11 设计模式之代理模式(送资料案例)

一、什么是代理模式&#xff1f; 在现实生活中&#xff0c;我们常常遇到这样的场景&#xff1a;由于某些原因&#xff0c;我们可能无法亲自完成某个任务&#xff0c;便会委托他人代为执行。在设计模式中&#xff0c;代理模式 就是用来解决这种“委托”问题的&#xff0…...

MongoDB聚合操作

1.聚合操作 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档&#xff0c;可以对分组数据执行各种操作以返回单个结果。聚合操作包含三类&#xff1a;单一作用聚合、聚合管道、MapReduce。 单一作用聚合&#xff1a;提供了对常见聚合过程的简单访问&#xff0c…...

第二十三周周报:High-fidelity Person-centric Subject-to-Image Synthesis

目录 摘要 Abstract TDM SDM SNF 测试时的人物细节捕捉 主要贡献 总结 摘要 本周阅读了一篇2024年CVPR的关于高保真度、以人物为中心的图像合成方法的论文&#xff1a;High-fidelity Person-centric Subject-to-Image Synthesis。该论文提出了一种名为Face-diffuser的…...

Cesium 与 Leaflet:地理信息可视化技术比较

在现代地理信息系统(GIS)和空间数据可视化领域,Cesium 和 Leaflet 是两种非常常见的地理可视化库,它们各自适用于不同的应用场景。Cesium 专注于三维地球视图和复杂空间分析,而 Leaflet 则注重轻量级的二维地图展示。本文将对这两种技术进行详细的对比,帮助开发者根据具体…...

Linux 服务器使用指南:诞生与演进以及版本(一)

一、引言 在当今信息技术的浪潮中&#xff0c;Linux 操作系统无疑是一个关键的支柱&#x1f60e;。无论是在服务器管理、软件开发还是大数据处理领域&#xff0c;Linux 都以其卓越的适应性和优势脱颖而出&#x1f44d;。然而&#xff0c;对于许多新手而言&#xff0c;Linux 系统…...

龙蜥 Linux 安装 JDK

龙蜥 Linux 安装 JDK 下载安装解压到目标路径设置环境变量直接在启动脚本中临时设置 参考资料 下载 这个就不赘述了&#xff0c;参考资料中的另外两篇安装帖&#xff0c;都有。 如果不能上网&#xff0c;也可以去内网其他之前装过JDK的服务器&#xff0c;直接复制过来。 tar …...

Python小白语法基础20(模块与包)

0) 参考文章 python的模块(module)、包(package)及pip_python package-CSDN博客Python之函数、模块、包库_python函数、模块和包-CSDN博客Python函数模块自定义封装及模块嵌套导入&#xff08;手把手教程&#xff09;_python如何封装一个模块-CSDN博客 1) 模块与包说明 软件…...

详解 Qt QtPDF之QPdfPageNavigator 页面跳转

文章目录 前言头文件&#xff1a; 自 Qt 6.4 起继承自&#xff1a; 属性backAvailable : const boolcurrentLocation : const QPointFcurrentPage : const intcurrentZoom : const qrealforwardAvailable : const bool 公共函数QPdfPageNavigator(QObject *parent)virtual ~QPd…...

通俗易懂:序列标注与命名实体识别(NER)概述及标注方法解析

目录 一、序列标注&#xff08;Sequence Tagging&#xff09;二、命名实体识别&#xff08;Named Entity Recognition&#xff0c;NER&#xff09;**命名实体识别的作用****命名实体识别的常见实体类别** &#xff1a; 三、标签类型四、序列标注的三种常见方法1. **BIO&#xf…...

【C语言】二叉树(BinaryTree)的创建、3种递归遍历、3种非递归遍历、结点度的实现

代码主要实现了以下功能&#xff1a; 二叉树相关数据结构定义 定义了二叉树节点结构体 BiTNode&#xff0c;包含节点数据值&#xff08;字符类型&#xff09;以及指向左右子树的指针。 定义了顺序栈结构体 SqStack&#xff0c;用于存储二叉树节点指针&#xff0c;实现非递归遍历…...

2024年11月文章一览

2024年11月编程人总共更新了21篇文章&#xff1a; 1.2024年10月文章一览 2.《使用Gin框架构建分布式应用》阅读笔记&#xff1a;p307-p392 3.《使用Gin框架构建分布式应用》阅读笔记&#xff1a;p393-p437 4.《使用Gin框架构建分布式应用》读后感 5.《Django 5 By Example…...

重生之我在异世界学编程之C语言:二维数组篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一 二维数组的创建1. 二维数组的…...

和鲸科技创始人CEO范向伟出席首届工业智算产业发展研讨会,共话 AI 创新与产业化落地

11 月 22 日&#xff0c;首届工业智算产业发展研讨会在中国工业互联网研究院召开。工业和信息化部党组成员、副部长单忠德&#xff0c;国家信息中心大数据发展部副主任魏颖出席会议并致辞。中国工程院院士、北京化工大学教授高金吉&#xff0c;工业和信息化部信息通信发展司二级…...

postgres数据备份与主从配置

备份PostgreSQL数据库 备份格式有几种选择&#xff1a; bak&#xff1a;压缩二进制格式 sql&#xff1a;明文转储 tar: tarball mydb# \q -bash-4.2$ pg pgawk pg_dump pgrep pg_basebackup pg_dumpall pg_restore# 备份所有的 -bash-4.2$ pg_dumpall &…...

【二分查找】力扣 275. H 指数 II

一、题目 二、思路 h 指数是高引用引用次数&#xff0c;而 citations 数组中存储的就是不同论文被引用的次数&#xff0c;并且是按照升序排列的。也就是说 h 指数将整个 citations 数组分成了两部分&#xff0c;左半部分是不够引用 h 次 的论文&#xff0c;右半部分论文的引用…...

使用uni-app进行开发前准备

使用uni-app进行开发&#xff0c;需要遵循一定的步骤和流程。以下是一个详细的指南&#xff0c;帮助你开始使用uni-app进行开发&#xff1a; 一、开发环境搭建 安装Node.js&#xff1a; 首先&#xff0c;从Node.js的官方网站&#xff08;https://nodejs.org/&#xff09;下载并…...

AI开发-深度学习框架-PyTorch-torchnlp

1 需求 Welcome to Pytorch-NLP’s documentation! — PyTorch-NLP 0.5.0 documentation 2 接口 3 示例 4 参考资料...

VBA数据库解决方案第十七讲:Recordset对象记录位置的定位方法

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...