Django views 中的 shortcut function
shortcut function都在django.shortcuts这个包中,主要包含有:render(), render_to_response(), redirect(), get_objects_or_404(), get_list_or_404()
1. render(request, template_name, context=None, context_instance=_context_instance_undefined, content_type=None, status=None, current_app=_current_app_undefined, dirs=_dirs_undefined, using=None)
返回一个HttpResponse对象,以及rendered 文本。
request, template_name是必选参数。
看官例:它指定模板为'myapp/index.html',内容类型为'application/xhtml+xml'
from django.shortcuts import render
def my_view(request):
# View code here...
return render(request, 'myapp/index.html', {
'foo': 'bar',
}, content_type='application/xhtml+xml')
它与下面这种方式等价:
from django.http import HttpResponse
from django.template import loader
def my_view(request):
# View code here...
t = loader.get_template('myapp/index.html')
c = {'foo': 'bar'}
return HttpResponse(t.render(c, request), content_type='application/xhtml+xml')
2. render_to_response(template_name, context=None, context_instance=_context_instance_undefined,
content_type=None, status=None, dirs=_dirs_undefined, using=None)
它与render基本类似,除了它不要求request参数,不推荐使用,而且在将来可能会被废弃,所以不多说。
3.redirect(to, permanent=False, *args, **kwargs)
返回HttpResponseRedirect 到一个合适的Url
参数可以是:
model:此时这个model的get_absolute_url()将被调用
a view name:(可带参数),此时urlresolvers.reverse会被调用
An absolute or relative URL:新的Url地址
默认情况下permanent=True会被发送,使其始终redirect
官例:
1.此时get_absolute_url()被调用来确定新的url
from django.shortcuts import redirect
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object)
2.此时reverse会被调用来处理url
def my_view(request):
...
return redirect('some-view-name', foo='bar')
3.redirect(),
def my_view(request):
...
return redirect('/some/url/')
或者:
def my_view(request):
...
return redirect('https://example.com/')
redirect默认情况下返回结果是临时redirect,除非设置permanent=True,如下:
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object, permanent=True)
4.get_object_or_404(klass, *args, **kwargs)
通过给定的model manager调用get()方法,但返回Http404,而不是model的 DoesNotExist异常
klass 可以是 model, manager, QuerySet实例
官例:
from django.shortcuts import get_object_or_404
def my_view(request):
my_object = get_object_or_404(MyModel, pk=1)
#等价于:
from django.http import Http404
def my_view(request):
try:
my_object = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404("No MyModel matches the given query.")
model这是最常见的情况,当然也可以是一个Queryset,
queryset = Book.objects.filter(title__startswith='M')
get_object_or_404(queryset, pk=1)
它与下面这样等价:
get_object_or_404(Book, title__startswith='M', pk=1)
最后 ,还可以是一个manager,特别是你自定义了manager时,(默认的manager就是objects)
get_object_or_404(Book.dahl_objects, title='Matilda')
你也可以用一个关联的manager:
author = Author.objects.get(name='Roald Dahl')
get_object_or_404(author.book_set, title='Matilda')
但有一点需要注意,因为这里使用了get,那么可能返回多个对象,此时会出现:MultipleObjectsReturned异常!
5.get_list_or_404(klass, *args, **kwargs)
返回filter的结果列表,如果结果为空,则返回Http404
klass同上
官例:返回所有已经published的对象
from django.shortcuts import get_list_or_404
def my_view(request):
my_objects = get_list_or_404(MyModel, published=True)
等价于:
from django.http import Http404
def my_view(request):
my_objects = list(MyModel.objects.filter(published=True))
if not my_objects:
raise Http404("No MyModel matches the given query.")
Django views 中的 shortcut function的更多相关文章
- Django views 中 View decorators
decorators(装饰器) 1. require_http_methods 在django.views.decorators.http中,可以用来限制请求的权限. require_http_met ...
- django views中提示cannot convert dictionary update sequence element #0 to a sequence错误
def message(request): message_list = MessageBoard.objects.all().order_by('-pk') return render(reques ...
- Django views 中的装饰器
关于装饰器 示例: 有返回值的装饰器:判断用户是否登录,如果登录继续执行函数,否则跳回登录界面 def auth(func): def inner(request, *args, **kwargs): ...
- django中views中方法的request参数
知其然亦要知其所以然 views每个方法的参数都是request,那么问题来了,request为何物? 首先,几乎每个方法都是取数据(无论是从数据库,还是从第三方接口),然后进行一定的处理,之后传给前 ...
- Python之Django之views中视图代码重复查询的优化
Django框架中views视图中如果多个函数都有同样的查询语句,例如: allcategory = Category.objects.all() remen = Article.objects.fi ...
- 在 Django 模板中遍历复杂数据结构的关键是句点字符
在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...
- Django Views and URLconfs
碧玉妆成一树高,万条垂下绿丝绦. 不知细叶谁裁出,二月春风似剪刀. 原文尽在:http://djangobook.com/ 转载请注明出处:http://www.cnblogs.com/A-FM/p/ ...
- Django项目中使用plupload插件实现上传图片功能
首先下载plupload插件放在static静态文件下面,官方地址:https://www.plupload.com/ 项目根目录下创建media文件夹用来存放上传的图片,配置settings文件,添 ...
- Django—views系统:views基础
Django的View(视图)简介 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
随机推荐
- GitHub Pages 搭建流程-基于jekyll-bootstrap
我写这篇文章的目的是记录本博客的搭建过程,自己从零开始逐步搭建起来了GitHub Pages,其中借鉴了很多的博客和模版,稍后会在后面列出,也为没有用过gihub和jekyll的童鞋提供一点帮助. 学 ...
- 【转载】VMware虚拟机修改硬盘容量大小
很多人在安装虚拟机系统的时候,为了节省硬盘空间,把硬盘容量设置得较小,可是后来发现硬盘容量不够用了.在VMware中又不能直接修改虚拟机的硬盘容量大小,或者重建虚拟机系统,非常麻烦. 其实在VMwar ...
- 黑马程序员——OC语言 内存管理
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)计数器 每个对象内部都保存了一个与之相关联的整数,称为引用计数器,当 ...
- 将HTML文本框设为不可编辑文本框。
将HTML文本框设为不可编辑文本框. 方法1: onfocus=this.blur() <input type="text" name="input1" ...
- JVM-并发-线程
线程 1.线程的实现 (1)实现线程主要有3中方式:使用内核线程实现,使用用户线程实现和使用用户线程加轻量级进程混合实现. (2)使用内核线程实现 内核线程就是直接由操作系统内核支持的线程,这种线程由 ...
- Android控件— — —ImageView
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...
- laravel_5《数据库迁移》
Laravel鼓励敏捷.迭代的开发方式,我们没指望在第一次就获得所有正确的.相反,我们编写代码.测试和与我们的最终用户进行交互,并完善我们的理解. 对于工作,我们需要一个配套的实践集.我们使用像sub ...
- Caffe 源碼閱讀(三) caffe.cpp
补:主要函数运行顺序: main>>GetBrewFunction>>train>>Solve 從main函數說起: 1.gflags庫中爲main函數設置usag ...
- Activity 和 生命周期: 创建
了解了整体的android创建流程之后,就分析一下到底这个过程中做了什么? activity创建中开始时由activityStack中的realstartActivityLocked函数中调用了act ...
- H5版俄罗斯方块(3)---游戏的AI算法
前言: 算是"long long ago"的事了, 某著名互联网公司在我校举行了一次"lengend code"的比赛, 其中有一题就是"智能俄罗斯方 ...