在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实现拉钩网上的FizzBuzzWhizz问题示例
May 05 Python
Python写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
跟老齐学Python之从if开始语句的征程
Sep 14 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
解决tensorflow训练时内存持续增加并占满的问题
Jan 19 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 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
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
Python中文件遍历的两种方法
2014/06/16 Python
Python中的choice()方法使用详解
2015/05/15 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
医学专业五年以上个人求职信
2013/12/03 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
安全标语大全
2014/06/10 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
绿色校园广播稿
2014/10/13 职场文书
Python中的 No Module named ***问题及解决
2022/07/23 Python
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript