Python Django设计模式及模板层

一、Django的MTV模式

MTV代表Model - Template - View (模型-模板-视图)模式。

  • M模型层(Model)负责与数据交互。

  • T模板层(Template)负责呈现内容到浏览器。

  • V视图层(View)是核心,负责接收请求、获取数据、返回结果。

    作用:降低模块间的耦合度(解耦)

在这里插入图片描述

二、模板

1.模板是可以根据字典数据动态变化的HTML网页。

2.模板可以根据视图中传递的字典数据动态生成相应的HTML网页。

三、模板配置

创建模板文件夹 <项目名>/templates

在setting.py中TEMPLATES配置项

  1. BACKEND:指定模板的引擎。
  2. DIRS:模板的搜索目录(可以是一个或多个)。
  3. APP_DIRS:是否要在应用中的templates文件夹中搜索模板文件。
  4. OPTIONS:有关模板的选项。

配置项中需要修改部分

设置DIRS- 'DIRS': [os.path.join(BASE_DIR, 'templates')]

在这里插入图片描述

四、模板的加载方式

使用rander()直接加载并响应模板

在视图函数中

    from django.shortcuts import renderreturn render(request, 'test.html', 字典数据)

典例1:

1.创建django工程mydjango,使用PyCharm打开该工程,创建模板文件夹templates,添加模板文件test.html

在这里插入图片描述

2.在视图文件views.py中,添加视图函数,如下图示:

在这里插入图片描述

3.在urls.py文件中配置下路由,如下图所示:

在这里插入图片描述

4.编译运行,在浏览器输入:http://127.0.0.1:8000/myfirstweb/test效果如下:

在这里插入图片描述

五、视图层与模板层之间的交互

1.视图函数中可以将Python变量封装到字典中传递到模板。

样例:

from django.shortcuts import renderdef xxx_view(request):dict = {'username': 'admin','password': 'admin@321'}return render(request, 'xxx.html', dict)

2.在模板中,我们可以使用{{变量名}}的语法,调用视图传进来的变量。

典例2:

修改典例1中views.py和test.html代码。

在这里插入图片描述
在这里插入图片描述

编译运行,在浏览器输入:http://127.0.0.1:8000/myfirstweb/test效果如下:
在这里插入图片描述

六、模板层的变量

1.能够传递到模板中的数据类型有:

  • str - 字符串
  • int - 整型
  • list - 列表
  • tuple - 元组
  • dict - 字典
  • func - 方法
  • obj - 类实例化的对象

2.在模板中使用变量语法

  • {{变量名}}
  • {{变量名.index}}
  • {{变量名.key}}
  • {{对象.方法}}
  • {{函数名}}

七、模板层的标签

作用:将一些服务器端的功能嵌入到模板中,例如:流程控制等。

标签语法:

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

if标签:

语法:

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

注意:

1.if条件表达式里可以用的运算符==, !=, <, >, <=, >=, in, not in, is, is not, not, and, or

2.在if标记中使用实际括号是无效的语法。如果您需要它们指示优先级,则应使用嵌套的if标记。

3.在流程控制中{% %}中,调用变量不需要加{{}},直接使用变量即可。

for标签

语法:

{% for 变量 in 可迭代对象 %}... 循环语句
{% empty %}... 可迭代对象无数据时填充的语句
{% endfor %}

内置变量 - forloop

变量描述
forloop.counter循环的当前迭代(从1开始索引)
forloop.counter0循环的当前迭代(从0开始索引)
forloop.revcountercounter值的倒序
forloop.revcounter0recounter值的倒序
forloop.first如果这是第一次通过循环,则为真
forloop.last如果这是最后一次循环,则为真
forloop.parentloop当嵌套循环,parentloop表示外层循环

典例3:

修改典例2中views.py和test.html代码。

在这里插入图片描述
在这里插入图片描述

编译运行,在浏览器输入:http://127.0.0.1:8000/myfirstweb/test效果如下:

在这里插入图片描述

八、模板层的过滤器

定义:在变量输出时对变量的值进行处理

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

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

常用过滤器:

过滤器说明
lower将字符串转换为全部小写形式
upper将字符串转换为全部大写形式
safe默认不对变量内的字符串进行HTML转义
add:‘n’将value的值增加n
truncatechars:‘n’如果字符串字符多于指定的字符数量,那么会被阶断。截断的字符串将以可翻译的省略号序列(“…”)结尾。

典例4:

修改典例3中views.py和test.html代码。

在这里插入图片描述
在这里插入图片描述

编译运行,在浏览器输入:http://127.0.0.1:8000/myfirstweb/test效果如下:

在这里插入图片描述

九、模板层的继承

在这里插入图片描述

模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并可以覆盖父模板中相应的块。

语法 - 父模板中:

1.定义父模板中的块block标签。

2.标识出哪些在子模块中是允许被修改的。

3.block标签:在父模板中定义,可以在子模板中覆盖。

语法 - 子模板中:

1.继承模板extends标签(写在模板文件的第一行)。

例如{% extends ‘base.html’%}

2.子模板重写父模板中的内容块

{% block block_name %}子模块用来覆盖父模板中 block_name 块的内容
{% endblock block_name %}

典例5:

创建django工程mydjango,使用PyCharm打开该工程,创建模板文件夹templates,添加模板文件base.html、music.html和sport.html,文件组织如下:

在这里插入图片描述

base.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8">{% block mytitle %}<title>主页</title>{% endblock mytitle %}
</head>
<body><a href="/myfirstweb/base">主页</a><a href="/myfirstweb/music">音乐频道</a><a href="/myfirstweb/sport">体育频道</a><br>{% block information %}这里是主页内容{% endblock information %}<br><h3>技术支持:0393-xxxxxxx</h3>
</body>
</html>

删除sport.html文件全部内容,添加如下代码:

{% extends 'base.html' %}{% block mytitle %}<title>体育频道</title>
{% endblock mytitle %}{% block information %}欢迎来到体育频道
{% endblock information %}

删除music.html全部内容,添加如下代码:

{% extends 'base.html' %}{% block mytitle %}<title>音乐频道</title>
{% endblock mytitle %}{% block information %}欢迎来到音乐频道
{% endblock information %}

在视图文件views.py中,添加如下代码:

from django.shortcuts import render
from django.http import HttpResponsedef base(request):return render(request, 'base.html')def music(request):return render(request, 'music.html')def sport(request):return render(request, 'sport.html')

在路由urls.py文件中添加如下代码:

from django.contrib import admin
from django.urls import path
from myfirstweb import views  # 从myfirstweb文件夹下导入views.py文件urlpatterns = [path('admin/', admin.site.urls),# http://127.0.0.1:8000/myfirstweb/basepath('myfirstweb/base', views.base),# http://127.0.0.1:8000/myfirstweb/musicpath('myfirstweb/music', views.music),# http://127.0.0.1:8000/myfirstweb/sportpath('myfirstweb/sport', views.sport),
]

编译运行,在浏览器输入:http://127.0.0.1:8000/myfirstweb/base效果如下:

在这里插入图片描述

单击“音乐频道”链接:

在这里插入图片描述

单击“体育频道”链接:

在这里插入图片描述


获取更多资料,请访问大土土随笔

如果本文对您有所帮助,请关注微信公众号“捷创源科技”。

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

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

相关文章

在Tomcat中配配置数据源汇总

为什么80%的码农都做不了架构师&#xff1f;>>> Tomcat本身不具备处理提供数据源的能力。借助于一些开源数据源实现&#xff0c;如&#xff1a;DBCP和C3P0等。 一、在http://commons.apache.org/可下载这些是Tomcat提供配置数据源所需的类库。 注意&#xff1a;Tom…

Linux debian安装、配置和使用PuTTY教程

PuTTY是一个小巧、好用、免费的跨平台的访问Linux服务器的终端工具。PuTTY工具可以使用Telnet、SSH、rlogin、纯TCP以及串行接口连接服务器&#xff0c;使用非常广泛。本文主要介绍Debian系统如何安装PuTTY和如何设置该工具的字体、颜色。从而实现个性化定制自己的PuTTY工具&am…

Linux Debian安装FileZilla文件远程传输工具

一、FileZilla简介 FileZilla是一个快速、免费、跨平台的FTP软件&#xff0c;实用多功能和界面直观的FTP客户端。FileZilla是Windows&#xff0c;Linux&#xff0c;MacOSX等跨平台的图形化FTP&#xff0c;SFTP和FTPS文件管理工具。通过大量直观的工具&#xff0c;FileZilla可以…

Linux Debian11使用国内源安装 Docker 环境

首先切换到root账户&#xff1a; su 一、Debian安装Docker 1.更新并安装一些必要系统工具。 sudo apt-get update sudo apt-get upgrade sudo apt-get install \apt-transport-https \software-properties-common \ca-certificates \curl \gnupg \lsb-release2.安装GPG证书…

计算机网络怎么寻址_计算机网络中的无类寻址

计算机网络怎么寻址To reduce the wastage of IP addresses in blocks we subnetting. But in Classless addressing wastage of IP addresses in a block is more reduced than Classful subnetting. In this variable length, blocks are used that belongs to no class. 为了…

Linux Debian常用下载工具Transmission和qbittorrent

1.Transmission Transmission是Linux Debian系统下的系统自带的一种BitTorrent客户端下载工具&#xff0c;下载速度比较快。在Linux系统可以替代windows上的迅雷下载工具。 2.qbittorrent 使用下面命令安装&#xff1a; sudo apt-get install qbittorrent获取更多资料&#x…

《 面试又翻车了》这次竟然和 Random 有关?

小强最近面试又翻车了&#xff0c;然而令他郁闷的是&#xff0c;这次竟然是栽到了自己经常在用的 Random 上......面试问题既然已经有了 Random 为什么还需要 ThreadLocalRandom&#xff1f;正文Random 是使用最广泛的随机数生成工具了&#xff0c;即使连 Math.random() 的底层…

Linux Debian11使用国内源安装Podman环境

一、Podman简介 Podman 是一个开源的容器运行时项目&#xff0c;可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样&#xff0c;它不需要在你的系统上运行任何守护进程&#xff0c;并且它也可以在没有 root 权限的情况下运行。 Podman 可…

二叉搜索树中第k大元素_二叉搜索树中第K个最小元素

二叉搜索树中第k大元素Problem statement: 问题陈述&#xff1a; Find the k-th smallest element in a given binary search tree (BST). 在给定的二进制搜索树(BST)中找到第k个最小的元素。 Example: 例&#xff1a; K4Kth smallest element in the above binary tree is:…

阿里巴巴Java开发手册建议设置HashMap的初始容量,但设置多少合适呢?

作者 l Hollis来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09;集合是Java开发日常开发中经常会使用到的&#xff0c;而作为一种典型的K-V结构的数据结构&#xff0c;HashMap对于Java开发者一定不陌生。关于HashMap&#xff0c;很多人都对他有一些基本的了解&…

面向.Net程序员的dump分析

背景 Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。在 Windows 系统上&#xff0c; dump 文件分为内核 dump 和用户态 dump 两种。前者一般用来分析内核相关的问题&#xff0c;比如驱动程序&#xff1b;后者一般用来分析用户态程序的问题。 一般…

Linux Debian利用Dockefile将Python的py文件项目代码打包为Docker Podman镜像

1.创建PyCharm工程 使用PyCharm创建testHelloWorld工程&#xff0c;如下图所示&#xff1a; 2.选择本项目下的Python解释器 通过File -> Setting…选择解释器为本工程下的Python解释器。 【备注&#xff1a;一定要将项目python环境依赖存至本项目下&#xff0c;默认依赖本…

Java14发布!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!​

Java 14 在 2020.3.17 日发布正式版了&#xff0c;但现在很多公司还在使用 Java 7 或 Java 8&#xff0c;每当看到 Java 又发布新版本心里就慌得一匹。不过此版本并不是 LTS (长期支持版) 版本&#xff0c;所以不要慌&#xff0c;我们先来了解一下好了&#xff0c;等 LTS 版本发…

PyCharm更换pip源为国内源、模块安装、PyCharm依赖包导入导出教程

一、更换pip为国内源 1.使用PyCharm创建一个工程 2.通过File -> Setting…选择解释器为本工程下的Python解释器。 3.单击下图中添加“”&#xff0c; 4.单击下图中的“Manage Repositories”按钮&#xff0c; 6.目前国内靠谱的 pip 镜像源有&#xff1a; - 清华&#xff1…

Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!

Java 14 在 2020.3.17 日发布正式版了&#xff0c;但现在很多公司还在使用 Java 7 或 Java 8&#xff0c;每当看到 Java 又发布新版本心里就慌得一匹。不过此版本并不是 LTS (长期支持版) 版本&#xff0c;所以不要慌&#xff0c;我们先来了解一下好了&#xff0c;等 LTS 版本发…

在线批量压缩JPG图片-JpegMini

2019独角兽企业重金招聘Python工程师标准>>> 之前有推荐过一个在线批量压缩PNG图片的网站TinyPng&#xff0c;这儿小觉再次推荐一个同类网站&#xff0c;专门在线批量压缩JPG图片的JpegMini。 当然&#xff0c;大家或者会说现在很多工具或者网站都有提供在线批量压缩…

《大厂内部资料》Redis 性能优化的 13 条军规!全网首发

这是我的第 43 篇原创文章。Redis 是基于单线程模型实现的&#xff0c;也就是 Redis 是使用一个线程来处理所有的客户端请求的&#xff0c;尽管 Redis 使用了非阻塞式 IO&#xff0c;并且对各种命令都做了优化&#xff08;大部分命令操作时间复杂度都是 O(1)&#xff09;&#…

Redis 性能优化的 13 条军规!史上最全

Redis 是基于单线程模型实现的&#xff0c;也就是 Redis 是使用一个线程来处理所有的客户端请求的&#xff0c;尽管 Redis 使用了非阻塞式 IO&#xff0c;并且对各种命令都做了优化&#xff08;大部分命令操作时间复杂度都是 O(1)&#xff09;&#xff0c;但由于 Redis 是单线程…

Linux Debian11 Podman容器常用命令

Podman 是一个开源的容器运行时项目&#xff0c;可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。它不需要在你的系统上运行任何守护进程&#xff0c;并且它也可以在没有 root 权限的情况下运行。 Podman 可以管理和运行任何符合 OCI&#xff08;Open Con…

惊呆了,竟然可以用这种方式秒建Redis集群?

前面我们讲了《Redis 性能优化的 13 条军规&#xff01;》&#xff0c;其中最重要的一条就是使用 Redis 的集群功能&#xff0c;那么本文我们就来看看&#xff0c;如何用 1s 钟的时间来创建一个 Redis 集群。 Redis Cluster 是 Redis 3.0 版本推出的 Redis 集群方案&#xff0…