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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 Python
Python之py2exe打包工具详解
Jun 14 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
python安装numpy和pandas的方法步骤
May 27 Python
Pytorch之parameters的使用
Dec 31 Python
python中什么是面向对象
Jun 11 Python
Python logging模块原理解析及应用
Aug 13 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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 获取远程网页内容的函数
2009/09/08 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
几道PHP的面试题
2012/05/19 面试题
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
内部类的定义、种类以及优点
2013/10/16 面试题
高二化学教学反思
2014/01/30 职场文书
设计师个人求职信范文
2014/02/02 职场文书
实验教师岗位职责
2014/02/13 职场文书
务工证明怎么写
2015/06/18 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL