Django 第三天学习笔记

news2025/1/29 13:53:43

1.模板层-变量和标签

能够传递到Django模板中的数据类型

1.str 字符串
2.Int 整形
3.List 数组
4.Tuple 元组
5.Dict 字典
6.Func 方法
7.Obj 类的实例化对象。

在模板中使用的变量的语法

  • {{变量名}}
  • {{变量名.index}} #索引
  • {{变量名.key}} #获取字典对应key的value
  • {{对象.方法}} #直接获取对象对应的方法.
  • {{函数名}} #直接调用某个函数

通过在模板层直接使用这种方式来暂时占用我们即将要使用的变量信息,即可实现在视图层将数据传输到模板层,并填充成httpResponse返回给客户端。这也意味着Django的模板是十分灵活的,能够应对大多数开发环境和实际应用的环境。

模板标签

对于标签的概念,类似于{{}}就是python的一种变量。但是这种标签只能使用一些最简单的常量标签。
因此,如果要在模板中使用一些前端的循环、选择、控制结构,可以使用一些标签来实现。

标签语法:

	{% 标签 %}
	...
	{% 结束标签 %}

例如:

{% if 条件表达式1 %}
...
{% elif 条件表达式2 %}
...
{% elif 条件表达式3 %}
...
{% endif %}

需要注意的是,if条件表达式里可以使用的运算符为==,!=,<,>,<=,>=,in,not in,is,is not,not ,and,or。而且在if标签中使用括号是一种无效的语法,如果需要使用括号来指示优先级的话,应当采用嵌套的if标记来实现。
对于视图层的函数定义,可以使用request.GET中的x的值来给dic中的x赋值。随后在模板中,通过定义if else语句来实现判断。
在这里插入图片描述
在这里插入图片描述
在这里,利用所学知识编写了一个简单的计算器,该计算器能够保存当前页面的值和操作状态。
在视图层,代码如下:

<html>
<head>
    <title>计算器</title>
</head>
<body>
    <table>
        <form action="./" method="post">
            <tr>
                <td>{{value1}}</td>
                <td>
                    <input type="text" name="num1" value="{{num1}}">
                </td>
            </tr>
            <tr>
                <td>
                    {{op}}
                </td>
                <td>
                    <select name="flag">
                        <option value="1" {{f1}}>+</option>
                        <option value="2" {{f2}}>-</option>
                        <option value="3" {{f3}}>*</option>
                        <option value="4" {{f4}}>÷</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    {{value2}}
                </td>
                <td>
                    <input type="text" name="num2" value="{{num2}}">
                </td>
            </tr>
            <tr>
                <td>
                    {{value3}}
                </td>
                <td>
                    <input type="text" name="res" value="{{res}}" disabled="disabled">
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="计算答案" name="submit">
                </td>
            </tr>
        </form>
    </table>
</body>
</html>

而在后台的代码实现中,使用的代码如下:
在这里插入图片描述
通过这种方式,在urls.py中定义基本的路径,打开浏览器能够实现最基础的计算器的功能。
在这里插入图片描述

同样的,使用for循环在视图层进行控制时,可以在模板曾定义如下的代码:

{% for name in lst%}
    {% if forloop.first %}
        &&&&&&&
    {% endif %}

    <p>{{forloop.counter}}.{{name}}</p>

    {% if forloop.last %}
        @@@@@@@
    {% endif %}
{% empty %}
当前没数据
{% endfor %}

在视图层定义的代码为:
在这里插入图片描述
forloop是django中为for循环内建的变量。其中forloop.first意味着第一次循环,forloop.last意味着最后一次循环,返回的内容都是bool型,因此,可以和if进行嵌套使用。
forloop.counter是对循环次数进行计数,主要作用是从1开始计数。
使用forloop.counter0是对循环次数进行计数,主要作用是从0开始计数。

2.模板层-过滤器和继承

模板层过滤器的定义:
在变量输出时对变量的值进行处理

模板层的作用:
可以通过使用过滤器来改变变量的输出显示

语法:
{{变量|过滤器1:’参数值1’|过滤器2:参数值2 …}}

常用的过滤器:
lower 将字符串全部改为小写
upper 将字符串全部改为大写
safe 默认不对变量内的字符串进行html转义(相当于关闭xss攻击防护,显示标签)
add:”n” 将value的值增加n
truncatechars:”n” 如果字符串字符多于指定的字符数量,那么会被截断。

关于模板的继承

模板的继承主要用于让多个页面继承相同的页面内容,避免重复代码的冗余开发。
通过多个页面复用相同的框架内容,实现动态内容的切换效果的同时,避免的相同组件的反复loading造成的开发工作的时间浪费。
模板继承可以使父模板的内容重用,子模版可以直接继承父模板的全部内容,并可以覆盖父模板中的相应的块。

语法-父模板中:
1.定义父模板中的块block标签
2.标识出那些在子模块中是允许被修改的。(中间部分允许被修改)
3.Block标签,在父模块中定义,可以在子模版中进行覆盖。
继承模板使用extends标签(写在模板文件的第一行)
例如:

{% extends ‘bash.html’ %}

该标签是没有结束标签的

因此,在此处,我们尝试定义一个父模板,命名为base.html

在这里插入图片描述

并在我们先前定义的calc.html中增加我们的继承语句。
其中
{% extends ‘base.html’%}语句的主要作用为增加对父页面的继承。
{% block info%}则为对父页面中的block info块的内容进行重写。

如果选择对父模板进行重写,则按照重写的效果进行显示,如果不对父模板进行重写,那么按照父模板的效果进行显示。
也就是需要被继承的父模板信息将会原封不动的在计算器页面中出现。
在这里插入图片描述

效果图如图:

在这里插入图片描述

在2.x版本中,但是需要注意的是,如果继承模板时,服务器端的动态内容是无法继承的。但是我在3.3版本中进行了测试,是能够继承的。因此具体情况还需要具体的进行分析。

3.url反向解析

目前来说,url的用途和使用范围如下:

1.模板中,在模板层,可以使用a标签的href属性来指定一个超链接。
2.表单中,form的action属性可以指定一个超链接用于提交数据。
3.视图函数中,可以使用HttpResponseRedirect来指定一个302跳转,使客户端获得一个新的超链接指向。

对于绝对地址和相对地址而言,在编程中也有多种描述,每种描述所代表的含义也各不相同。

在这里插入图片描述
在模板层中,定义了一套h5的页面来表述各种地址点击后跳转的差异化问题。具体的差异可以通过实践来进一步证实和测试。

Url的反向解析是指在视图层的视图函数定义时,使用path函数的第三个参数name来定义一个路由规则的别名,进行动态的查找对应的地址信息。
在urls.py中,定义路由规则,给path参数提供第三个参数来实现路径的别名定义。
在这里插入图片描述

通过定义别名,相当于就把展示页面和输出结构的字符串和url进行了绑定。

在模板层,即可使用
{% url ‘别名’%} 来实现跳转路径的指定,无需考虑绝对路径和相对路径的具体编写模式。

如果该页面存在参数,则可以通过
{% url ‘别名’ ‘参数值1’ ‘参数值2’%}
实现url的动态拼接。

因此,为了实现页面1-N的动态跳转排列展示,可以通过配合模板层的for循环和url反向解析规则,构建跳转参数。

在路由urls.py中,定义规则:
在这里插入图片描述

在视图层中,定义字典信息。并将数据动态更新到模板层中。
在这里插入图片描述
在模板层中,使用url标签和for循环,循环控制页面的输出信息和特定的经过拼接的url路径,通过django提供的url反向解析实现页面跳转的简单化。
在这里插入图片描述
最终实现的效果图如下:
在这里插入图片描述

在这里插入图片描述

通过反向解析,能够实现即使项目路径规则出现了变化,但是由于存在反向解析,所以模板层的地址将会动态的随着路由规则的信息的变化而变化,无需在模板层进行跳转路径的修改。
如果需要在视图层查找对应的别名所对应的url地址。那么需要载入python模板

from django.urls import reverse;

通过
reverse(别名,args=参数列表, kwargs={})
来实现reverse方法进行url反向解析。

在这里插入图片描述

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

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

相关文章

数据结构顺序栈

栈 这是大话数据结构种对于栈的描述 可以看到 栈是一种特殊的线性表 它只能在尾部进行元素的插入和删除 但是在栈种 这叫做 入栈 和 出栈 而且它遵循 先进入的元素后出 后进入的元素先出 即就是我们常听说的 先进后出 和后进先出 这里就有一个简单的例子 先进后出 后进先出…

【Node.js】实现微信小程序在线支付功能

实战项目名称&#xff1a;微信小程序实现在线支付功能 - 文章结尾附上微信小程序码&#xff0c;扫码登录后即可体验&#xff01;&#xff01; 文章目录一、实战步骤1. 前期准备2. 添加wechatpay-node-v3和fs插件3. 预设微信下单的数据4. 将上一步骤的下单信息返回给前端5. 小程…

在抖音全程看世界杯,超高清直播背后的硬实力

导语&#xff1a;IT技术赛场开赛&#xff01;作者 | 宋慧 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;当前&#xff0c;2022 卡塔尔世界杯比赛正在如火如荼进行中&#xff0c;处在更加激烈关键的半决赛阶段。作为足球运动的全球顶级赛事&#xff0c;世界杯…

SysML图例-核聚变

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> [新闻]核聚变里程碑式突破>> SysML图中词汇&#xff1a; Tokamak&#xff1a; 一种利用磁约束来实现受控核聚变的环形容器&#xff0c;通过约束电磁波驱动&#xff…

如何形成前端知识体系

来啦各位大佬&#xff5e;但很不好意思&#xff0c;我就是标题党&#xff0c;这篇博文并没有很明确的给出「如何形成前端知识体系」答案&#xff0c;我自学前端&#xff0c;在面试字节的时候&#xff0c;字节的大佬说我的知识点没有成体系&#xff0c;很零散的飘在各个地方&…

面试官:你如何实现大文件上传

提到大文件上传&#xff0c;在脑海里最先想到的应该就是将图片保存在自己的服务器&#xff08;如七牛云服务器&#xff09;&#xff0c;保存在数据库&#xff0c;不仅可以当做地址使用&#xff0c;还可以当做资源使用&#xff1b;或者将图片转换成base64&#xff0c;转换成buff…

怎么复制网页上不能复制的文字(付费文档免费复制),一招搞定

好多小伙伴上网查资料的时候&#xff0c;想要复制网页内容&#xff0c;但是提示付费复制或者不允许复制&#xff0c;遇到这种情况怎么办呢&#xff1f;下面就是小编分享的一招搞定无法复制网页内容文字的方法。 怎么复制网页上不能复制的文字 借助360安全浏览器/360极速浏览器…

Minecraft 1.19.2 Forge模组开发 06.建筑生成

1.12.2自定义建筑生成 1.16.5自定义建筑生成 1.18.2自定义建筑生成 我们本次尝试在主世界生成一个自定义的建筑。 效果展示效果展示效果展示 由于版本更新缘故&#xff0c;1.19的建筑生成将不涉及任何Java包的代码编写&#xff0c;只需要在数据包中对建筑生成进行自定义。 …

基于粒子群优化算法的BP神经网络预测模型(Matlab代码实现)

目录 1 概述 2 粒子群优化算法 3 BP神经网络 4 PSO优化 BP网络算法 5 运行结果 6 参考文献 7 Matlab代码实现 1 概述 在工程应用中经常会遇到一些复杂的非线性系统,这些系统的状态方程复杂,难以准确的用数学方法建模,而BP神经网络实质上实现了一个从输入到输出的映射功…

【k8s】Kubernetes 基础组件详解

一、k8s简介 Kubernetes 是容器集群管理系统工具&#xff0c;是一个开源平台&#xff0c;可实现容器集群的自动化部署、自动扩缩容、维护等功能。Kubernetesk8s是Kubernetes的缩写&#xff0c;Google 于 2014 年开源了 Kubernetes 项目&#xff0c;Kubernetes的名字来自希腊语&…

无延时直播/超低延时直播实际测试延时效果(项目实测组图)

阿酷TONY / 2022-11-30 / 长沙 / 超多组图 无延时直播/超低延时直播&#xff0c;主要只测试延时情况&#xff0c;没有涉及直播产品的功能、使用操作界面&#xff0c;有兴趣的朋友可以加联系我实际测试哦~~~ 1.无延时直播应用场景 无延时直播/超低延时常见应用场景&#…

近90天互动量破百万,「围炉煮茶」究竟做对了什么?

今年秋冬&#xff0c;“围炉煮茶”爆红网络。小红书相关笔记数量突破8万&#xff0c;累计话题浏览量1200万次&#xff0c;近90天互动量破百万&#xff01; 茶&#xff0c;从老一辈的茶杯茶盘里&#xff0c;通过创新再造&#xff0c;成为年轻人的社交“新”头好。高流量曝光、高…

Go语言性能剖析利器--pprof实战

作者&#xff1a;耿宗杰 前言 关于pprof的文章在网上已是汗牛充栋&#xff0c;却是千篇一律的命令介绍&#xff0c;鲜有真正实操的&#xff0c;本文将参考Go社区资料&#xff0c;结合自己的经验&#xff0c;实战Go程序的性能分析与优化过程。 优化思路 首先说一下性能优化的…

什么是文档管理?

什么是文档管理&#xff1f; 文档管理是指在公司或组织内部组织、存储和检索文档以及自动化工作流程所需的流程和资源。文档可以是硬拷贝或数字格式&#xff0c;包括合同、表单、发票、工作申请、福利登记信息和其他记录。 强大的文档管理的重要性 平均而言&#xff0c;由于…

Web实时预览 界面组件Telerik——提高开发者工作效率的完美组合

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库&#xff0c;加快开发速度。Telerik DevCraft提供最完整的工具箱&#xff0c;用于构建现代和面向未来的业务应用程序。 Telerik ASP.NET AJAX (Web Forms) 组件在…

SAP ABAP OAOR SBDSV1新建BDS类/DOI大数据量输出EXCEL时错误空白或不完整

SAP ABAP OAOR SBDSV1新建BDS类/ DOI大数据量输出 EXCEL时错误空白或不完整 引言&#xff1a; 今日回顾 DOI 使用过程中的两个问题&#xff0c;第一个是管理性问题&#xff08;新建 BDS 类&#xff09;&#xff0c;第二个是技术性问题&#xff08; DOI 大数据量输出 EXCEL 时错…

数据对接:从Notion Database到低代码平台app

前言 Notion简介 近几年&#xff0c;有一款叫Notion的产品异常火爆&#xff0c;它是集笔记、任务管理、Wiki、数据管理为一体的产品&#xff0c;他主打两个理念「模块化」和「All-in-one」&#xff0c;Notion最有魅力的还是引进了Database和双向链的理念 Notion也算是一个渐…

美丽田园通过聆讯:上半年期内利润下降近80% 演员刘涛代言

雷递网 雷建平 12月13日由演员刘涛代言的美丽田园医疗健康产业有限公司&#xff08;简称&#xff1a;“美丽田园”&#xff0c;Beauty Farm&#xff09;日前通过聆讯&#xff0c;准备在港交所上市。上半年期内利润下降近80%美丽田园首家门店1993年成立&#xff0c;至今美丽田园…

C++ Reference: Standard C++ Library reference: Containers: map: map: operators

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/operators/ 函数 <map> std::relational operators (map) (1) template <class Key, class T, class Compare, class Alloc> bool operator ( const map<Key,T,Compare,Alloc>&…

记cf一些可能被hack的写法

1. unordered_map 现象 之前经常当O(1)用&#xff0c;作为一些卡常题的必备杀器&#xff0c; 而且&#xff0c;有的hdu/lc题不用umap的话&#xff0c;就只能手写哈希 但是&#xff0c;上次cf里写了个umap被卡了&#xff0c; 这才意识到之前看到的博客不是无稽之谈 其实我…