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操作MongoDB详解及实例
May 18 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
python3爬虫怎样构建请求header
Dec 23 Python
python opencv摄像头的简单应用
Jun 06 Python
python元组和字典的内建函数实例详解
Oct 22 Python
用python3读取python2的pickle数据方式
Dec 25 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
python 利用opencv实现图像网络传输
Nov 12 Python
PYTHON InceptionV3模型的复现详解
May 06 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 mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
React组件生命周期详解
2017/07/03 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
python list语法学习(带例子)
2013/11/01 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
python爬虫实例详解
2018/06/19 Python
python操作文件的参数整理
2019/06/11 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
《乡愁》教学反思
2014/02/18 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android