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数据类型转换函数总结
Mar 11 Python
Python中关键字is与==的区别简述
Jul 31 Python
跟老齐学Python之画圈还不简单吗?
Sep 20 Python
Python列表生成器的循环技巧分享
Mar 06 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
python实现电子词典
Mar 03 Python
python中如何进行连乘计算
May 28 Python
Python Mock模块原理及使用方法详解
Jul 07 Python
Autopep8的使用(python自动编排工具)
Mar 02 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
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
smarty缓存用法分析
2014/12/16 PHP
4种PHP异步执行的常用方式
2015/12/24 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
js实现小时钟效果
2020/03/25 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
Python实现性能自动化测试竟然如此简单
2019/07/30 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
应用化学专业本科生求职信
2013/09/29 职场文书
物业管理员岗位职责范文
2013/11/25 职场文书
婚礼主持词
2014/03/13 职场文书
计算机软件专业求职信
2014/06/10 职场文书
建筑工地质量标语
2014/06/12 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
法定代表人授权委托书
2014/09/19 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
2015年科协工作总结
2015/05/19 职场文书
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android