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之网站的结构
Oct 24 Python
让 python 命令行也可以自动补全
Nov 30 Python
python 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
Oct 21 Python
Python实现八皇后问题示例代码
Dec 09 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 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对象在内存中的存在形式分析
2015/02/03 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
jquery解决客户端跨域访问问题
2015/01/06 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
基于bootstrap3和jquery的分页插件
2015/07/31 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
python递归查询菜单并转换成json实例
2017/03/27 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
Python内置函数及功能简介汇总
2020/10/13 Python
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
写好自荐信的要点
2013/11/06 职场文书
教师个人自我评价范文
2014/04/13 职场文书
希特勒的演讲稿
2014/05/23 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
详解如何使用Nginx解决跨域问题
2022/05/06 Servers
MySql数据库触发器使用教程
2022/06/01 MySQL