1
mapleray 2017-06-01 10:20:06 +08:00 1
你写的方法 1 和方法 2 都是很早时候的了吧,现在推荐的是直接类视图或者用 render.
像直接 local()这样不明确的用法,python 语言本身也不是推荐的吧 |
2
zhengxiaowai 2017-06-01 10:39:01 +08:00 2
大兄弟,这种是直接看几行源码就能明白的问题。
你的方法 1 和 方法 2 本质的差别在于是否需要在 context 中添加 request。所以你只要明白 django 中这个 request 和 locals() 是什么意思,就知道这两个的区别了。 - locals(): 这是一个 Python 局部命名空间,存在局部变量。 - django 的 request: 这个是 Django Request 的一个实例,主要存储着一些 HTTP 相关一些基本信息。 至于用不用 request 取决你模板中时候要使用,不使用不传也是可以的。 ---- 其实放出的这两个函数的源码,你就可以看出来和你方法 1 和 方法 2 有什么异同了。 #: django.shortcuts.render def render(request, template_name, context=None, content_type=None, status=None, using=None): content = loader.render_to_string(template_name, context, request, using=using) return HttpResponse(content, content_type, status) loader 是 django template 的一个代理。 render_to_string 本质就是把 template 转换成字符串。 #: loader.render_to_string def render_to_string(template_name, context=None, request=None, using=None): if isinstance(template_name, (list, tuple)): template = select_template(template_name, using=using) else: template = get_template(template_name, using=using) return template.render(context, request) 明显看出来,你对框架整体架构不是很清楚。 我觉得我的《 Bottle 源码分析》对你会有帮助: https://hexiangyu.me/posts/18 |
3
garygay OP @mapleray 兄弟,那么无论是 post 还是 get,都可以只用 render 吗,还有的您说的类视图是什么意思?
|
4
garygay OP @zhengxiaowai 谢谢兄弟。
|
5
Revenant 2017-06-01 11:01:29 +08:00
无论是 post 还是 get,都属于 Request
和你用什么方式 Response 没有必然的联系吧 |
7
chuanqirenwu 2017-06-01 11:33:46 +08:00 1
render 是对 TemplateResponse 类的包装,TemplateResponse 是对 HttpRespnse 的包装。render 函数和直接构造 TemplateResponse 实例返回是一样的。但无论是 render,还是 TemplateResponse,最终返回的是 HttpRespnse 的实例。
|