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 相关文章推荐
动态创建类实例代码
Oct 07 Python
python在linux中输出带颜色的文字的方法
Jun 19 Python
理解python正则表达式
Jan 15 Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
Django 跨域请求处理的示例代码
May 02 Python
python os用法总结
Jun 08 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
Django发送邮件功能实例详解
Sep 02 Python
python取均匀不重复的随机数方式
Nov 27 Python
Python基础之字符串常见操作经典实例详解
Feb 26 Python
python中return如何写
Jun 18 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中eclipse 用空格替换 tab键
2013/06/24 PHP
php中异常处理方法小结
2015/01/09 PHP
深入理解PHP中的count函数
2016/05/31 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
Python中使用logging模块打印log日志详解
2015/04/05 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
python 内置函数filter
2017/06/01 Python
几行Python代码爬取3000+上市公司的信息
2019/01/24 Python
python 二维数组90度旋转的方法
2019/01/28 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
加拿大留学自荐信
2014/01/28 职场文书
幼儿园门卫制度
2014/01/29 职场文书
党员实事承诺书
2014/03/26 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
服装设计专业自荐信
2014/06/17 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
会议通知
2015/04/15 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB