详解Python的Django框架中的模版相关知识


Posted in Python onJuly 15, 2015

HTML被直接硬编码在 Python 代码之中。

def current_datetime(request):
  now = datetime.datetime.now()
  html = "<html><body>It is now %s.</body></html>" % now
  return HttpResponse(html)

尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意。 让我们来看一下为什么:

  •     对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。 站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。
  •     Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。 设计者和HTML/CSS的编码人员不应该被要求去编辑Python的代码来完成他们的工作。
  •     程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。

基于这些原因,将页面的设计和Python的代码分离开会更干净简洁更容易维护。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这就是本章要具体讨论的问题。

模板系统基本知识

模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。

让我们从一个简单的例子模板开始。 该模板描述了一个向某个与公司签单人员致谢 HTML 页面。 可将其视为一个格式信函:

<html>
<head><title>Ordering notice</title></head>

<body>

<h1>Ordering notice</h1>

<p>Dear {{ person_name }},</p>

<p>Thanks for placing an order from {{ company }}. It's scheduled to
ship on {{ ship_date|date:"F j, Y" }}.</p>

<p>Here are the items you've ordered:</p>

<ul>
{% for item in item_list %}
  <li>{{ item }}</li>
{% endfor %}
</ul>

{% if ordered_warranty %}
  <p>Your warranty information will be included in the packaging.</p>
{% else %}
  <p>You didn't order a warranty, so you're on your own when
  the products inevitably stop working.</p>
{% endif %}

<p>Sincerely,<br />{{ company }}</p>

</body>
</html>

该模板是一段添加了些许变量和模板标签的基础 HTML 。 让我们逐步分析一下:

    用两个大括号括起来的文字(例如 {{ person_name }} )称为 变量(variable) 。这意味着在此处插入指定变量的值。 如何指定变量的值呢? 稍后就会说明。

    被大括号和百分号包围的文本(例如 {% if ordered_warranty %} )是 模板标签(template tag) 。标签(tag)定义比较明确,即: 仅通知模板系统完成某些工作的标签。

    这个例子中的模板包含一个for标签( {% for item in item_list %} )和一个if 标签({% if ordered_warranty %} )

    for标签类似Python的for语句,可让你循环访问序列里的每一个项目。 if 标签,正如你所料,是用来执行逻辑判断的。 在这里,tag标签检查ordered_warranty值是否为True。如果是,模板系统将显示{% if ordered_warranty %}和{% else %}之间的内容;否则将显示{% else %}和{% endif %}之间的内容。{% else %}是可选的。

    最后,这个模板的第二段中有一个关于filter过滤器的例子,它是一种最便捷的转换变量输出格式的方式。 如这个例子中的{{ship_date|date:”F j, Y” }},我们将变量ship_date传递给date过滤器,同时指定参数”F j,Y”。date过滤器根据参数进行格式输出。 过滤器是用管道符(|)来调用的,具体可以参见Unix管道符。

Django 模板含有很多内置的tags和filters,我们将陆续进行学习. 附录F列出了很多的tags和filters的列表,熟悉这些列表对你来说是个好建议. 你依然可以利用它创建自己的tag和filters。

Python 相关文章推荐
python判断端口是否打开的实现代码
Feb 10 Python
Python写的英文字符大小写转换代码示例
Mar 06 Python
Python中使用pprint函数进行格式化输出的教程
Apr 07 Python
详解Python中的元组与逻辑运算符
Oct 13 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 Python
Python+Wordpress制作小说站
Apr 14 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
使用Tkinter制作信息提示框
Feb 18 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
Python新建项目自动添加介绍和utf-8编码的方法
Dec 26 Python
Django中处理出错页面的方法
Jul 15 #Python
在Django中创建动态视图的教程
Jul 15 #Python
Python的Django框架中的URL配置与松耦合
Jul 15 #Python
Django查找网站项目根目录和对正则表达式的支持
Jul 15 #Python
在Django中创建第一个静态视图
Jul 15 #Python
开始着手第一个Django项目
Jul 15 #Python
Python的Django框架可适配的各种数据库介绍
Jul 15 #Python
You might like
建立动态的WML站点(三)
2006/10/09 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
常用PHP框架功能对照表
2014/10/23 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python验证码识别处理实例
2015/12/28 Python
图文详解WinPE下安装Python
2016/05/17 Python
Python类属性的延迟计算
2016/10/22 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
C#面试题
2016/05/06 面试题
企业职业病防治方案
2014/05/29 职场文书
总经理任命书范本
2014/06/05 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
个性与发展自我评价
2015/03/06 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL