在Python的Django框架中创建和使用模版


Posted in Python onJuly 15, 2015

如何使用模板系统

让我们深入研究模板系统,你将会明白它是如何工作的。但我们暂不打算将它与先前创建的视图结合在一起,因为我们现在的目的是了解它是如何独立工作的。 。 (换言之, 通常你会将模板和视图一起使用,但是我们只是想突出模板系统是一个Python库,你可以在任何地方使用它,而不仅仅是在Django视图中。)

在Python代码中使用Django模板的最基本方式如下:

  •     可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Template 对象;
  •     调用模板对象的render方法,并且传入一套变量context。它将返回一个基于模板的展现字符串,模板中的变量和标签会被context值替换。

代码如下:

>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
>>> c = template.Context({'name': 'Adrian'})
>>> print t.render(c)
My name is Adrian.
>>> c = template.Context({'name': 'Fred'})
>>> print t.render(c)
My name is Fred.

以下部分逐步的详细介绍
创建模板对象

创建一个 Template 对象最简单的方法就是直接实例化它。 Template 类就在 django.template 模块中,构造函数接受一个参数,原始模板代码。 让我们深入挖掘一下 Python的解释器看看它是怎么工作的。

转到project目录(在第二章由 django-admin.py startproject 命令创建), 输入命令 python manage.py shell 启动交互界面。

一个特殊的Python提示符

如果你曾经使用过Python,你一定好奇,为什么我们运行python manage.py shell而不是python。这两个命令都会启动交互解释器,但是manage.py shell命令有一个重要的不同: 在启动解释器之前,它告诉Django使用哪个设置文件。 Django框架的大部分子系统,包括模板系统,都依赖于配置文件;如果Django不知道使用哪个配置文件,这些系统将不能工作。

如果你想知道,这里将向你解释它背后是如何工作的。 Django搜索DJANGO_SETTINGS_MODULE环境变量,它被设置在settings.py中。例如,假设mysite在你的Python搜索路径中,那么DJANGO_SETTINGS_MODULE应该被设置为:'mysite.settings'。

当你运行命令:python manage.py shell,它将自动帮你处理DJANGO_SETTINGS_MODULE。 在当前的这些示例中,我们鼓励你使用`` python manage.py shell``这个方法,这样可以免去你大费周章地去配置那些你不熟悉的环境变量。

随着你越来越熟悉Django,你可能会偏向于废弃使用`` manage.py shell`` ,而是在你的配置文件.bash_profile中手动添加 DJANGO_SETTINGS_MODULE这个环境变量。

让我们来了解一些模板系统的基本知识:

>>> from django.template import Template
>>> t = Template('My name is {{ name }}.')
>>> print t

如果你跟我们一起做,你将会看到下面的内容:

<django.template.Template object at 0xb7d5f24c>

0xb7d5f24c 每次都会不一样,这没什么关系;这只是Python运行时 Template 对象的ID。

当你创建一个 Template 对象,模板系统在内部编译这个模板到内部格式,并做优化,做好 渲染的准备。 如果你的模板语法有错误,那么在调用 Template() 时就会抛出 TemplateSyntaxError 异常:

>>> from django.template import Template
>>> t = Template('{% notatag %}')
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
 ...
django.template.TemplateSyntaxError: Invalid block tag: 'notatag'

这里,块标签(block tag)指向的是`` {% notatag %}``,块标签与模板标签是同义的。

系统会在下面的情形抛出 TemplateSyntaxError 异常:

  •     无效的tags
  •     标签的参数无效
  •     无效的过滤器
  •     过滤器的参数无效
  •     无效的模板语法
  •     未封闭的块标签 (针对需要封闭的块标签)

Python 相关文章推荐
python将MongoDB里的ObjectId转换为时间戳的方法
Mar 13 Python
python通过邮件服务器端口发送邮件的方法
Apr 30 Python
浅谈python抛出异常、自定义异常, 传递异常
Jun 20 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 Python
tensorflow的计算图总结
Jan 12 Python
Python定时器线程池原理详解
Feb 26 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
详解Python的Django框架中的模版相关知识
Jul 15 #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
You might like
PHP基础知识回顾
2012/08/16 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
python字符串连接方法分析
2016/04/12 Python
Python编程实现正则删除命令功能
2017/08/30 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
用python制作个音乐下载器
2021/01/30 Python
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
大四本科生的自我评价
2013/12/30 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
护士自我鉴定怎么写
2014/02/07 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
设计师求职信
2014/07/01 职场文书
行政文员岗位职责
2015/02/04 职场文书
入党转正介绍人意见
2015/06/03 职场文书
如何正确理解python装饰器
2021/06/15 Python
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫