文档章节

用render_to_response()简化views层

小致dad
 小致dad
发布于 2016/07/15 10:35
字数 419
阅读 3
收藏 0

我们来看看 views 层的文件 views.py:

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime

def current_datetime_template(request):
    now = datetime.datetime.now()
    t = get_template('current_datetime.html')
    html = t.render(Context({'current_date': now}))
    return HttpResponse(html)

import 这么多东西,还是比较麻烦。我们这里试下把它弄简洁一些,毕竟 Python 是门高效开发的语言,可不能这么复杂。

render_to_response()

前面我们使用 get_template() 方法代替繁杂的用代码来处理模板及其路径的工作。 但这仍然需要一定量的时间来敲出这些简化的代码。 这是一个普遍存在的重复苦力劳动。Django为此提供了一个捷径,让你一次性地载入某个模板文件,渲染它,然后将此作为 HttpResponse 返回。

该捷径就是位于 django.shortcuts 模块中名为 render_to_response() 的函数。下面使用 render_to_response() 重新编写过的 current_datetime 范例。

from django.shortcuts import render_to_response
import datetime

def current_datetime_template(request):
    now = datetime.datetime.now()
    return render_to_response('current_datetime.html', {'current_date': now})

大变样了! 让我们逐句看看代码发生的变化:

  • 我们不再需要导入 get_template 、 Template 、 Context 和 HttpResponse 。相反,我们导入 django.shortcuts.render_to_response 。 import datetime 继续保留。
  • 在 current_datetime 函数中,我们仍然进行 now 计算,但模板加载、上下文创建、模板解析和 HttpResponse 创建工作均在对 render_to_response() 的调用中完成了。 由于 render_to_response() 返回 HttpResponse 对象,因此我们仅需在视图中 return 该值。
  • render_to_response() 的第一个参数必须是要使用的模板名称。 如果要给定第二个参数,那么该参数必须是为该模板创建 Context 时所使用的字典。 如果不提供第二个参数, render_to_response() 使用一个空字典。

© 著作权归作者所有

共有 人打赏支持
小致dad

小致dad

粉丝 165
博文 543
码字总数 584211
作品 0
济南
技术主管
私信 提问
django第一个app,3

增加页面和功能 Question “index” page – displays the latest few questions. Question “detail” page – displays a question text, with no results but with a form to vote. Quest......

NLGBZJ
2018/01/19
0
0
Yii2的一些小坑---关于跳转和助手类的灵活使用

YII本身的跳转很灵活。一般的MVC出现跳转的也不外乎: (1)V->V 页面之前的跳转 (2)C->V 正常的MVC方式 (3)V->C 请求数据接口数据传参,我还是一般都会用JS的ajax实现 这三种也都逃不了...

0_0Loong
2018/01/15
0
0
Django 实现WEB登陆(第二版)

实现环境: 1、System version:rh6.5 2、Python version:2.6.6 3、Django version:1.2.7 创建项目: 1、[root@localhost ~]#django-admin.py startproject mysite 2、[root@localhost mysit......

gswljy
2017/02/24
0
0
DJango简单的后台定义登录验证

第一步创建一个新的项目 APPLICATIONNAME : 表示创建子项目 第二步:找到主项目的url 进行 include 分发式url 简单的说,就是将app里边的url放在这里。 这里也可以找到。 在下来一步就是在a...

库库的码农
2017/03/09
0
0
Django上传文件代码

在django里面上传文件 views.py # Create your views here. # coding=utf-8 from django.http import HttpResponse,HttpResponseRedirect from django.shortcuts import rendertoresponse fr......

劲风online
2015/10/22
61
0

没有更多内容

加载失败,请刷新页面

加载更多

JDK1.8新特性

1.Java 8 允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫扩展方法。 2.Lambda 表达式。参数 => 主体。Lambda表达返回右边表达式的结果。 3.用 :: 关键...

无精疯
20分钟前
0
0
http_load压测服务器

1.下载http_load ,下载地址:http://acme.com/software/http_load/http_load-12mar2006.tar.gz [root@localhost ~]#cd /usr/local[root@localhost local]#mkdir http_load[root@loc......

win_ball
21分钟前
0
0
Spark集群安装方式2

环境: jdk1.8、hadoop-2.7、spark-1.6、三台centos7(如下List-1所示) List-1 如下30上部署master;31上部署worker1;32上部署worker2 192.168.33.30 master192.168.33.31 worker1192.168.......

克虏伯
36分钟前
2
0
java File常用的方法

import java.io.File; public class a_22 { public static void main(String[] args) {File f= new File("D:\\tianya\\2019.3.14\\html");System.out.println(f.isDirectory());Syste......

南桥北木
43分钟前
2
0
Go基础系列:双层channel用法示例

双层通道的解释见Go的双层通道 以下是一个双层通道的使用示例。注意下面的示例中使用了"信号通道"(Signal channel),但这里的信号通道是多余的,仅仅只是为了介绍。 信号通道不用来传递数据,...

echojson
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部