详解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中lambda与def用法对比实例分析
Apr 30 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
对pandas中to_dict的用法详解
Jun 05 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
Oct 15 Python
python Pexpect模块的使用
Dec 25 Python
Python中time与datetime模块使用方法详解
Mar 31 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
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
PHP实现非阻塞模式的方法分析
2018/07/26 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
Ext 表单布局实例代码
2009/04/30 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
video.js添加自定义组件的方法
2020/12/09 Javascript
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Python自动化部署工具Fabric的简单上手指南
2016/04/19 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
3种python调用其他脚本的方法
2020/01/06 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
24个canvas基础知识小结
2014/12/17 HTML / CSS
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
一套中级Java程序员笔试题
2015/01/14 面试题
《英英学古诗》教学反思
2014/04/11 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
违纪学生保证书
2015/02/27 职场文书
专家推荐信怎么写
2015/03/25 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
党风廉政教育心得体会2016
2016/01/22 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP