为了使网站更干净简洁更容易维护,页面的设计和Python的代码必须分离开。我们可以使用Django的 模板系统 (Template System)来实现这种模式。

几个简单的模板标签(tag):

for 标签 {% for item in item_list %}   用于构建简单的循环,允许你遍历循环中的每一项

if 标签 {% if ordered_warranty %}  是用来执行逻辑判断的。在这个例子中标签检测 ordered_warranty 变量值是否为 True 。如果是,模板系统将显示 {% if ordered_warranty %} 与 {% endif %} 之间的所有内容

filter 过滤器  它能让你用来转换变量的输出, 在这个例子中, {{ship_date|date:"F j, Y" }} 将变量 ship_date 用 date 过滤器来转换,转换的参数是 "F j, Y" . date 过滤器根据指定的参数进行格式输出。过滤器是用管道字符( | )来调用的,就和Unix管道一样

模板渲染

一旦你创建一个 Template 对象,你可以用 context 来传递数据给它。一个context是一系列变量和它们值的集合。模板使用它来赋值模板变量标签和执行块标签。

context在Django里表现为 Context 类,在 django.template 模块里。 它的构造函数有一个可选参数:一个字典(映射变量和它们的值)。调用 Template 对象 的 render() 方法并传递context来填充模板:

>>> from django.template import Context, Template
>>> t = Template("My name is {{ name }}.")
>>> c = Context({"name": "Stephane"})
>>> t.render(c)
'My name is Stephane.'

在视图中使用模板

模板加载

需要指定模板保存的位置并用 Python 内建的文件操作函数来读取文件内容,使用使用 模板加载 来做这个事情。Django 提供了一种使用方便且功能强大的 API ,用于从磁盘中加载模板,要使用此模板加载API,首先你必须将模板的保存位置告诉框架。该项工作在 设置文件 中完成。

目前而言,仅需关注 TEMPLATE_DIRS 设置。该设置告诉 Django 的模板加载机制在哪里查找模板。缺省情况下,该设置的值是一个空的元组。选择一个目录用于存放模板并将其添加到 TEMPLATE_DIRS 中:

TEMPLATE_DIRS = ('/home/django/mysite/templates',
)

不要忘记模板目录字符串尾部的逗号!Python 要求单元素元组中必须使用逗号,以此消除与圆括号表达式之间的歧义。这是新手常犯的错误。

更灵活一点并减少一些负面干扰,可利用 Django 配置文件就是 Python 代码这一点来动态构建 TEMPLATE_DIRS 的内容,如:

import os.pathTEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)

Python 内部变量 __file__ ,该变量被自动设置为代码所在的 Python 模块文件名。

下一步:修改视图代码 views.py

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetimedef current_datetime(request):now = datetime.datetime.now()t = get_template('current_datetime.html')html = t.render(Context({'current_date': now}))return HttpResponse(html)

使用了函数 django.template.loader.get_template() ,而不是手动从文件系统加载模板。该 get_template()函数以模板名称为参数,在文件系统中找出模块的位置,打开文件并返回一个编译好的 Template 对象。

接下来,在模板目录中创建包括以下模板代码 current_datetime.html 文件:

<html><body>It is now {{ current_date }}.</body></html>

在网页浏览器中刷新该页,你将会看到完整解析后的页面

render_to_response()

由于加载模板、填充 context 、将经解析的模板结果返回为 HttpResponse 对象这一系列操作实在太常用了,Django 提供了一条仅用一行代码就完成所有这些工作的捷径。该捷径就是位于 django.shortcuts 模块中名为 render_to_response() 的函数。大多数时候,你将使用 render_to_response() ,而不是手动加载模板、创建 Context 和 HttpResponse 对象。

下面就是使用 render_to_response() 重新编写过的 current_datetime 范例。

from django.shortcuts import render_to_response
import datetimedef current_datetime(request):now = datetime.datetime.now()return render_to_response('current_datetime.html', {'current_date': now})

render_to_response() 的第一个参数必须是要使用的模板名称。如果要给定第二个参数,那么该参数必须是为该模板创建 Context 时所使用的字典。如果不提供第二个参数, render_to_response() 使用一个空字典。

include 模板标签

{% include %} 。该标签允许在(模板中)包含其它的模板的内容。标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复。

模板继承

模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载。

第一步是定义 基础模板 , 该框架之后将由 子模板 所继承。 base.html 的模板

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head><title>{% block title %}{% endblock %}</title>
</head>
<body><h1>My helpful timestamp site</h1>{% block content %}{% endblock %}{% block footer %}<hr><p>Thanks for visiting my site.</p>{% endblock %}
</body>
</html>

{% block %} 标签告诉模板引擎,子模板可以重载这些部分。

现在修改前边的current_datetime.html ,让它来继承模板

{% extends "base.html" %}{% block title %}The current time{% endblock %}{% block content %}
<p>It is now {{ current_date }}.</p>
{% endblock %}

再为 hours_ahead 视图创建一个模板

{% extends "base.html" %}{% block title %}Future time{% endblock %}{% block content %}
<p>In {{ hour_offset }} hour(s), it will be {{ next_time }}.</p>
{% endblock %}

{% extends %} 标签, 表示该模板是一个子模板。模板引擎立即装载其父模板,即本例中的 base.html 。

这个方法可最大限度地重用代码,并使得向公共区域(如区域级的导航)添加内容成为一件轻松的工作。
如果需要获得父模板中代码块的内容,可以使用 {{ block.super }} 变量。如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。

转载于:https://www.cnblogs.com/taiguyiba/p/6055306.html

python学习笔记--Django入门二 Django 的模板系统相关推荐

  1. Python学习笔记之入门基础

    课程链接:Python入门教程--基础阶段_哔哩哔哩_bilibili Python学习笔记 注释 单行注释: * 多行注释: 1.多行前面加# 2."""注释信息&qu ...

  2. Python学习笔记:入门(1)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Python学习笔记:入门(2)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. [Python学习笔记]h5py入门讲解

    本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍,作者刚接触h5py,完全靠看文档自学,如果哪里说的不对,欢迎纠正!如果读者需要进一步详细的学习h5py的更多知识,请参考h5p ...

  5. python学习笔记(十二)标准库os

    os 模块提供了访问操作系统服务的功能,它所包含的内容比较多. >>> import os >>> dir(os) ['EX_CANTCREAT', 'EX_CON ...

  6. python学习笔记分享(二十四)python学习笔记分期补充(二)复数,randint与sample,进制转换表,转义字符,二维数组,键,end,pass,迭代器和生成器

    一:复数 Python支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型. complex(x) 将x转换到一个复数,实数部 ...

  7. Python学习笔记之类(二)

    使用类和实例 1.给属性指定默认值,类中的每个属性都必须有初始值,哪怕这个值是0或空字符串.在有些情况下,如设置默认值时,在方法__init__()内指定这种初始值是可行的:如果你对某个属性这样做了, ...

  8. python学习笔记(十二)python操作redis

    1.python要操作redis 首先需要安装redis模块,然后导入才能使用 安装:pip install redis 导入:import redis 2.连接redis r = redis.Red ...

  9. Python学习笔记1入门+简单结构+数据类型+常用操作符

    Python应用范围 操作系统 WEB 3D动画 企业应用 云计算 Python3.0和以前的版本有大量的不兼容问题 用IDLe界面写的Python代码: Python 3.8.6 (tags/v3. ...

  10. Python学习笔记之基础(二)变量和类型

    1. 创建变量,输出变量 savings = 100 print(savings) 2. 变量运算 savings = 100 factor = 1.10 result = savings * fac ...

最新文章

  1. 共面阻抗对高频PCB 设计中传输线阻抗控制的影响
  2. Java中的instanceof关键字
  3. VTK:图表之RemoveIsolatedVertices
  4. html扩展xhtml在线,告别html,迎来xhtml
  5. windows2016安装.netFramework 3.5
  6. PHP目前比较常见的五大运行模式
  7. ROS学习笔记1(配置ROS环境和创建工作空间)
  8. oracle 11g r2 rac中节点时间不同步,Oracle 11gR2 安装RAC错误之--时钟不同步
  9. go语言之进阶篇字符串转换
  10. jQuery LightBox插件原理的简单实现
  11. 微信小程序网络请求服务器php接口获取数据库数据信息
  12. HTML写简历表格及内容
  13. linux设置进程优先级工具,linux性能分析优化之基础指标参数(3) - 进程优先级 cpu nice priority NI PR %ni %nice...
  14. [Irving] Android 点击两次返回退出系统
  15. 8、虚拟串口(VSPT)使用小记
  16. 美团html页面代码,html+css+js制作美团官网
  17. 任务并行库(Task Parellel Library)parallel.for parallel.foreach、List、ConcurrentBag 并行集合、线程安全结合
  18. 微信支付密码设置html,微信支付页面怎么加密码锁屏(微信支付界面怎么上锁)...
  19. 旅游网站如何根据游客决策过程去做营销?
  20. 世界杯数据可视化分析

热门文章

  1. ylbtech-dbs:ylbtech-7,welfareSystem(福利发放系统)
  2. 好东西再安利一遍!!
  3. 重零开始学前端-基础(1) 什么是变量
  4. python-递归函数
  5. Python3.2-re模块之常用正则记录
  6. 安装android studio报错Failed to install Intel HAXM.
  7. 搭建VSFTPD服务器 虚拟用户认证方式
  8. 批处理获取网卡名称(附修改IP、网关、DNS脚本)
  9. 12v服务器电源改可调_IBM服务器电源,艾默生7001578-j000 改造DIY成可调电源详细教程...
  10. BZOJ4025 二分图