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 render
    return 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 render

def 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 HttpResponse


def 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/base
    path('myfirstweb/base', views.base),
    # http://127.0.0.1:8000/myfirstweb/music
    path('myfirstweb/music', views.music),
    # http://127.0.0.1:8000/myfirstweb/sport
    path('myfirstweb/sport', views.sport),
]

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

在这里插入图片描述

单击“音乐频道”链接:

在这里插入图片描述

单击“体育频道”链接:

在这里插入图片描述


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python Django是一个开源的Web应用程序框架,它以快速且高效的方式构建高质量的Web应用程序。Python Django包含有许多功能,包括强大的URL路由、模板系统、ORM、自带的Admin系统、Session管理、Cookie管理等等。Python Django同时也支持多种数据库,包括MySQL、SQLite、PostgreSQL等等。总之,Python Django是一个优秀的Web框架,它提供了丰富的功能以及可扩展性和易用性,使得Web开发更加简单、轻松。 如果您想学习Python Django,建议首先了解Python编程语言的基础知识,例如掌握Python的数据类型、控制结构、函数等知识。接着可以了解Django包的下载和安装,以及相关的开发环境设置。此外,您也需要了解Django的MVC(Model-View-Controller)设计模式、URL路由、模板系统、ORM等核心概念和特性。 对于初学者而言,可以从一个简单的Web应用程序开始学习Python Django。例如,可以从一个简单的CRUD(创建、读取、更新、删除)应用程序入手,逐渐了解Django的各种开发方法和技巧。此外,也可以参考一些优秀的Python Django教程和指南,例如Django官方文档、《Django之路》等等,获得更全面的学习指导。 学习Python Django需要细心、耐心、动手实践,不断试错和调试。通过不断的学习和实践,您可以掌握Python Django的核心概念和开发技巧,为您的Web应用程序开发之路打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皓月盈江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值