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类方法__init__和__del__构造、析构过程分析
Mar 06 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
django表单的Widgets使用详解
Jul 22 Python
Pytorch之parameters的使用
Dec 31 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
Python实现播放和录制声音的功能
Aug 12 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 Python
Python集合的基础操作
Nov 01 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 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
javascript fullscreen全屏实现代码
2009/04/09 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
初中语文教学反思
2014/02/02 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
慰问信格式规范
2015/03/23 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
表扬信范文
2019/04/22 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python