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的更多相关文章

  1. Django views 中 View decorators

    decorators(装饰器) 1. require_http_methods 在django.views.decorators.http中,可以用来限制请求的权限. require_http_met ...

  2. 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 ...

  3. Django views 中的装饰器

    关于装饰器 示例: 有返回值的装饰器:判断用户是否登录,如果登录继续执行函数,否则跳回登录界面 def auth(func): def inner(request, *args, **kwargs): ...

  4. django中views中方法的request参数

    知其然亦要知其所以然 views每个方法的参数都是request,那么问题来了,request为何物? 首先,几乎每个方法都是取数据(无论是从数据库,还是从第三方接口),然后进行一定的处理,之后传给前 ...

  5. Python之Django之views中视图代码重复查询的优化

    Django框架中views视图中如果多个函数都有同样的查询语句,例如: allcategory = Category.objects.all() remen = Article.objects.fi ...

  6. 在 Django 模板中遍历复杂数据结构的关键是句点字符

    在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...

  7. Django Views and URLconfs

    碧玉妆成一树高,万条垂下绿丝绦. 不知细叶谁裁出,二月春风似剪刀. 原文尽在:http://djangobook.com/ 转载请注明出处:http://www.cnblogs.com/A-FM/p/ ...

  8. Django项目中使用plupload插件实现上传图片功能

    首先下载plupload插件放在static静态文件下面,官方地址:https://www.plupload.com/ 项目根目录下创建media文件夹用来存放上传的图片,配置settings文件,添 ...

  9. Django—views系统:views基础

    Django的View(视图)简介 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...

随机推荐

  1. win7 下设置时间格式为yyyy-MM-dd 格式无效的解决方法

    部分win7 64位机器,在时间区域部分设置了时间格式为:yyyy-MM-dd后程序和数据库里面还是原来默认的yyyy/MM/dd格式 打开注册表,搜索 yyyy/MM/dd ,修改为yyyy-MM- ...

  2. 【转】Mybatis 3.1中 Mapper XML 文件 的学习详解

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...

  3. android布局学习之相对布局(RelativeLayout)

    移通152余继彪 RelativeLayout可以设置某一个视图相对于其他视图的位置,这些位置可以包括上下左右等 RelativeLayout    属性  说明 android:layout_bel ...

  4. linux命令每日一练习-top free

    top看看进程的内存使用情况 free产看内存使用情况 top -n 2 -b > log.txt   将更新两次的结果输入到log.txt cat > log.txt //清空文件并写入 ...

  5. javaEE(web)SEO优化 Yahoo军规

    javaEE(web)SEO优化 Yahoo军规 1.尽可能减少HTTP请求数2.使用CDN3.添加Expire/Cache-Control头4.启用Gzip压缩5.将CSS房在页面最上方6.将Scr ...

  6. 关于asp的运行环境配置

    xp系统的配置方法http://jingyan.baidu.com/article/4f7d571289ac441a201927da.html win7系统的配置方法http://jingyan.ba ...

  7. 传智播客JavaWeb day05-session、url重写

    1.session是什么 1.1 session是一种会话技术  ps:还有一种是cookie 2.session的作用 2.1 服务器端会话范围内的数据共享 3.session的生命周期 3.1何时 ...

  8. 更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误

    更新新网卡驱动,修复win7雷凌网卡Ralink RT3290在电脑睡眠时和启动网卡时出现蓝屏netr28x.sys驱动文件错误 我的本本是win7,雷凌网卡Ralink RT3290   802.1 ...

  9. 转 C# DataTable 和List之间相互转换的方法

    一.List/IEnumerable转换到DataTable/DataView 方法一: /// <summary> /// Convert a List{T} to a DataTabl ...

  10. ubunut 14.04 将Caps Lock设置为Control

    入手了emacs,一直折腾想把caps Lock设置为control键. 网上看到一个用gnome里找到系统-首选项之类可以直接设置的.在14.04版的ub中是找不到的(新版设置太坑,只有那么几个选项 ...