热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PythonDjango设计模式及模板层

介绍了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, 'test.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代码如下:

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-xxxxxxxh3>
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
效果如下:

单击“音乐频道”链接:

单击“体育频道”链接:


如果本文对您有所帮助,请关注微信公众号“捷创源科技”。加入知识星球,可以获取更多技术干货!





推荐阅读
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文介绍如何使用JPA Criteria API创建带有多个可选参数的动态查询方法。当某些参数为空时,这些参数不会影响最终查询结果。 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • Python Django大学生心理健康管理系统开发(含源码、文档)
    本项目包含完整的源代码、设计文档、数据库结构以及详细的安装指南,旨在为计算机专业的学生提供一个全面的心理健康管理系统解决方案。 ... [详细]
author-avatar
刘胜良昭桂家贤
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有