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教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
python实现读Excel写入.txt的方法
Apr 29 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
python Matplotlib模块的使用
Sep 16 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 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
Protoss热键控制
2020/03/14 星际争霸
php抽象类使用要点与注意事项分析
2015/02/09 PHP
初识laravel5
2015/03/02 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
node.js入门教程
2014/06/01 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
laypage.js分页插件使用方法详解
2019/07/27 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
python字符串格式化方式解析
2019/10/19 Python
python判断链表是否有环的实例代码
2020/01/31 Python
python with语句的原理与用法详解
2020/03/30 Python
python 追踪except信息方式
2020/04/25 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
css3学习心得分享
2013/08/19 HTML / CSS
德国网上超市:myTime.de
2019/08/26 全球购物
建筑毕业生自我鉴定
2013/10/18 职场文书
营销与策划专业毕业生求职信
2013/11/01 职场文书
新三好学生主要事迹
2014/01/23 职场文书
党课培训主持词
2014/04/01 职场文书
企业计划生育责任书
2015/05/09 职场文书