在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类定义和类继承详解
May 08 Python
python实现识别相似图片小结
Feb 22 Python
Python 高级专用类方法的实例详解
Sep 11 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
TensorFlow 显存使用机制详解
Feb 03 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
浅谈keras中loss与val_loss的关系
Jun 22 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 14 Python
教你怎么用python爬取爱奇艺热门电影
May 20 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使用标签替换的方式生成静态页面
2015/05/21 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
Python logging模块handlers用法详解
2020/08/14 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
元宵节晚会主持人串词
2014/03/25 职场文书
个人授权委托书范本
2014/04/03 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
活动总结书怎么写
2015/05/11 职场文书
2016年万圣节活动总结
2016/04/05 职场文书