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中函数的多种格式和使用实例及小技巧
Apr 13 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
对python Tkinter Text的用法详解
Oct 11 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 Python
python 下载文件的几种方式分享
Apr 07 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
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
jQuery.each使用详解
2015/07/07 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
react基本安装与测试示例
2020/04/27 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
法律专业自我鉴定
2013/10/03 职场文书
四年级语文教学反思
2014/02/05 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
二人合伙经营协议书
2014/09/13 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
地道战观后感
2015/06/04 职场文书
学校隐患排查制度
2015/08/05 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书