在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 06 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
Python及PyCharm下载与安装教程
Nov 18 Python
python正则实现计算器功能
Dec 14 Python
python时间日期函数与利用pandas进行时间序列处理详解
Mar 13 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
Django实战之用户认证(初始配置)
Jul 16 Python
python连接mongodb集群方法详解
Feb 13 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
Python grpc超时机制代码示例
Sep 14 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 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
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
python文件特定行插入和替换实例详解
2017/07/12 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
python list格式数据excel导出方法
2018/10/31 Python
由面试题加深对Django的认识理解
2019/07/19 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
Python如何绘制日历图和热力图
2020/08/07 Python
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
入党积极分子自我批评思想汇报
2014/10/10 职场文书
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技