Django框架下在视图中使用模版的方法


Posted in Python onJuly 16, 2015

 打开current_datetime 视图。 以下是其内容:

from django.http import HttpResponse
import datetime

def current_datetime(request):
  now = datetime.datetime.now()
  html = "<html><body>It is now %s.</body></html>" % now
  return HttpResponse(html)

让我们用 Django 模板系统来修改该视图。 第一步,你可能已经想到了要做下面这样的修改:

from django.template import Template, Context
from django.http import HttpResponse
import datetime

def current_datetime(request):
  now = datetime.datetime.now()
  t = Template("<html><body>It is now {{ current_date }}.</body></html>")
  html = t.render(Context({'current_date': now}))
  return HttpResponse(html)

没错,它确实使用了模板系统,但是并没有解决我们在本章开头所指出的问题。 也就是说,模板仍然嵌入在Python代码里,并未真正的实现数据与表现的分离。 让我们将模板置于一个 单独的文件 中,并且让视图加载该文件来解决此问题。

你可能首先考虑把模板保存在文件系统的某个位置并用 Python 内建的文件操作函数来读取文件内容。 假设文件保存在 /home/djangouser/templates/mytemplate.html 中的话,代码就会像下面这样:

from django.template import Template, Context
from django.http import HttpResponse
import datetime

def current_datetime(request):
  now = datetime.datetime.now()
  # Simple way of using templates from the filesystem.
  # This is BAD because it doesn't account for missing files!
  fp = open('/home/djangouser/templates/mytemplate.html')
  t = Template(fp.read())
  fp.close()
  html = t.render(Context({'current_date': now}))
  return HttpResponse(html)

然而,基于以下几个原因,该方法还算不上简洁:

  •     它没有对文件丢失的情况做出处理。 如果文件 mytemplate.html 不存在或者不可读, open() 函数调用将会引发 IOError 异常。
  •     这里对模板文件的位置进行了硬编码。 如果你在每个视图函数都用该技术,就要不断复制这些模板的位置。 更不用说还要带来大量的输入工作!
  •     它包含了大量令人生厌的重复代码。 与其在每次加载模板时都调用 open() 、 fp.read() 和 fp.close() ,还不如做出更佳选择。
Python 相关文章推荐
python pdb调试方法分享
Jan 21 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
深入解析Python中的__builtins__内建对象
Jun 21 Python
详解Python使用tensorflow入门指南
Feb 09 Python
浅谈python中get pass用法
Mar 19 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
python元组和字典的内建函数实例详解
Oct 22 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
Python3如何在服务器打印资产信息
Aug 27 Python
详解Django中的过滤器
Jul 16 #Python
在Python的Django框架中为代码添加注释的方法
Jul 16 #Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 #Python
Python实现数通设备端口使用情况监控实例
Jul 15 #Python
Python实现快速多线程ping的方法
Jul 15 #Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 #Python
Python的Django框架中if标签的相关使用
Jul 15 #Python
You might like
PHP里的中文变量说明
2011/07/23 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
2018/09/16 PHP
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
js实现表格数据搜索
2020/08/09 Javascript
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
Python 多线程的实例详解
2017/09/07 Python
django js实现部分页面刷新的示例代码
2018/05/28 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python3.x实现base64加密和解密
2019/03/28 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Django工程的分层结构详解
2019/07/18 Python
centos7之Python3.74安装教程
2019/08/15 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
运行时异常与一般异常有何异同?
2014/01/05 面试题
校园摄影活动策划方案
2014/02/05 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
关于python爬虫应用urllib库作用分析
2021/09/04 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫