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之wxPython菜单使用详解
Sep 28 Python
python回溯法实现数组全排列输出实例分析
Mar 17 Python
Windows下PyMongo下载及安装教程
Apr 27 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
python 剪切移动文件的实现代码
Aug 02 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
python机器学习库xgboost的使用
Jan 20 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
OpenCV 图像梯度的实现方法
Jul 25 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
了解咖啡雨林联盟认证 什么是雨林认证 雨林认证是什么意思
2021/03/05 新手入门
php设计模式 Strategy(策略模式)
2011/06/26 PHP
php中文验证码实现方法
2015/06/18 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
基于vue.js实现购物车
2020/01/15 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
Python字典简介以及用法详解
2016/11/15 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
Python pickle模块实现对象序列化
2019/11/22 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
Pandas的Apply函数具体使用
2020/07/21 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
荟萃全球保健品:维他购
2018/05/09 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
物业工作计划书
2014/01/10 职场文书
安全标准化实施方案
2014/02/20 职场文书
规划编制实施方案
2014/03/15 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
会计系毕业求职信
2014/08/07 职场文书
劳模事迹材料范文
2014/12/24 职场文书
优秀英文求职信范文
2015/03/19 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
elementui的el-popover修改样式不生效的解决
2021/06/30 Javascript
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
css3 选择器
2022/05/11 HTML / CSS