• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Django框架下在视图中使用模版的方法

python 搞代码 4年前 (2022-01-09) 28次浏览 已收录 0个评论

打开current_datetime 视图。 以下是其内容:

from django.http import HttpResponseimport datetimedef current_datetime(request):  now = datetime.datetime.now()  html = "<body>I<i>本文来源gaodai$ma#com搞$$代**码网</i>t is now %s." % now  return HttpResponse(html)

让我们用 Django 模板系统来修改该视图。 第一步,你可能已经想到了要做下面这样的修改:

from django.template import Template, Contextfrom django.http import HttpResponseimport datetimedef current_datetime(request):  now = datetime.datetime.now()  t = Template("<body>It is now {{ current_date }}.")  html = t.render(Context({'current_date': now}))  return HttpResponse(html)

没错,它确实使用了模板系统,但是并没有解决我们在本章开头所指出的问题。 也就是说,模板仍然嵌入在Python代码里,并未真正的实现数据与表现的分离。 让我们将模板置于一个 单独的文件 中,并且让视图加载该文件来解决此问题。

你可能首先考虑把模板保存在文件系统的某个位置并用 Python 内建的文件操作函数来读取文件内容。 假设文件保存在 /home/djangouser/templates/mytemplate.html 中的话,代码就会像下面这样:

from django.template import Template, Contextfrom django.http import HttpResponseimport datetimedef 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() ,还不如做出更佳选择。

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Django框架下在视图中使用模版的方法
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址