鍍金池/ 教程/ Python/ Django 的快捷函數(shù)
點擊劫持保護
安全問題歸檔
Model 類參考
將遺留數(shù)據(jù)庫整合到Django
關(guān)聯(lián)對象參考
內(nèi)建基于類的視圖的API
聚合
Django 中的用戶認證
django.contrib.humanize
Django管理文檔生成器
分頁
使用Django輸出CSV
加密簽名
文件儲存API
安全
Django中的測試
國際化和本地化
為Django編寫首個補丁
條件表達式
日志
模型元選項
部署靜態(tài)文件
執(zhí)行查詢
使用Django認證系統(tǒng)
基于類的視圖
中間件
編寫自定義的django-admin命令
Django 的設(shè)置
格式本地化
數(shù)據(jù)庫訪問優(yōu)化
錯誤報告
基于類的內(nèi)建通用視圖
編寫自定義存儲系統(tǒng)
編寫你的第一個 Django 程序 第3部分
編寫數(shù)據(jù)庫遷移
使用表單
編寫你的第一個 Django 程序 第2部分
編寫你的第一個 Django 程序 第1部分
如何使用會話
系統(tǒng)檢查框架
新手入門
信號
編寫視圖
如何使用WSGI 部署
編寫你的第一個Django應(yīng)用,第6部分
常見的網(wǎng)站應(yīng)用工具
Widgets
內(nèi)建的視圖
模型實例參考
視圖層
Django中的密碼管理
高級教程:如何編寫可重用的應(yīng)用
國際化和本地化
"本地特色"附加功能
TemplateResponse 和 SimpleTemplateResponse
模式編輯器
文件上傳
快速安裝指南
部署 Django
表單 API
表單素材 ( <code>Media</code> 類)
管理文件
其它核心功能
查找 API 參考
表單
Admin
數(shù)據(jù)庫函數(shù)
自定義查找
使用基于類的視圖處理表單
管理操作
開發(fā)過程
編寫你的第一個Django應(yīng)用,第5部分
進行原始的sql查詢
模型層
多數(shù)據(jù)庫
編寫你的第一個 Django 程序 第4部分
Django安全
Django 初探
Django異常
重定向應(yīng)用
按需內(nèi)容處理
管理器
視圖裝飾器
驗證器
使用Django輸出PDF
File對象
Django 的快捷函數(shù)
基于類的通用視圖 —— 索引
為模型提供初始數(shù)據(jù)
模板層
URL調(diào)度器
中間件
模型

Django 的快捷函數(shù)

django.shortcuts 收集了“跨越” 多層MVC 的輔助函數(shù)和類。 換句話講,這些函數(shù)/類為了方便,引入了可控的耦合。

render

render(request, template_name[, context][, context_instance][, content_type][, status][, current_app][, dirs][, using])[source]

結(jié)合一個給定的模板和一個給定的上下文字典,并返回一個渲染后的 HttpResponse 對象。

render() 與以一個強制使用RequestContextcontext_instance 參數(shù)調(diào)用render_to_response() 相同。

Django 不提供返回TemplateResponse 的快捷函數(shù),因為TemplateResponse 的構(gòu)造與render() 提供的便利是一個層次的。

必選的參數(shù)

request

用于生成響應(yīng)的請求對象。

template_name

要使用的模板的完整名稱或者模板名稱的一個序列。

可選的參數(shù)

context

添加到模板上下文的一個字典。默認是一個空字典。如果字典中的某個值是可調(diào)用的,視圖將在渲染模板之前調(diào)用它。

Django 1.8 的改變:

context 參數(shù)之前叫做dictionary。這個名字在Django 1.8 中廢棄并將在Django 2.0 中刪除。

context_instance

渲染模板的上下文實例。默認情況下,模板將使用RequestContext 實例( 值來自requestcontext)渲染。

版本 1.8 以后廢棄:

廢棄context_instance 參數(shù)。僅僅使用context。

content_type

生成的文檔要使用的MIME 類型。默認為DEFAULT_CONTENT_TYPE 設(shè)置的值。

status

響應(yīng)的狀態(tài)碼。默認為200。

current_app

指示哪個應(yīng)用包含當前的視圖。更多信息,參見帶命名空間的URL 的解析。

版本1.8 以后廢棄:

廢棄current_app 參數(shù)。你應(yīng)該設(shè)置request.current_app。

using

用于加載模板使用的模板引擎的名稱。

Changed in Django 1.8:

增加using 參數(shù)。
Changed in Django 1.7:

增加dirs 參數(shù)。
Deprecated since version 1.8:

廢棄dirs 參數(shù)。

示例

下面的示例渲染模板myapp/index.html,MIME 類型為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 RequestContext, loader

def my_view(request):
    # View code here...
    t = loader.get_template('myapp/index.html')
    c = RequestContext(request, {'foo': 'bar'})
    return HttpResponse(t.render(c),
        content_type="application/xhtml+xml")

render_to_response

render_to_response(template_name[, context][, context_instance][, content_type][, status][, dirs][, using])[source]

根據(jù)一個給定的上下文字典渲染一個給定的目標,并返回渲染后的HttpResponse。

必選的參數(shù)

template_name

使用的模板的完整名稱或者模板名稱的序列。如果給出的是一個序列,將使用存在的第一個模板。關(guān)于如何查找模板的更多信息請參見 模板加載的文檔 。

可選的參數(shù)

context

添加到模板上下文中的字典。默認是個空字典。如果字典中的某個值是可調(diào)用的,視圖將在渲染模板之前調(diào)用它。

Changed in Django 1.8:

context 參數(shù)之前叫做dictionary。 這個名字在Django 1.8 中廢棄并將在Django 2.0 中刪除。

context_instance

渲染模板使用的上下文實例。默認情況下,模板將Context 實例(值來自context)渲染。如果你需要使用上下文處理器,請使用RequestContext 實例渲染模板。你的代碼看上去像是這樣:

return render_to_response('my_template.html',
                          my_context,
                          context_instance=RequestContext(request))
版本1.8 以后廢棄:

廢棄context_instance 參數(shù)。 僅僅使用context。

content_type

生成的文檔使用的MIME 類型。默認為DEFAULT_CONTENT_TYPE 設(shè)置的值。

status

相應(yīng)的狀態(tài)碼。默認為200。

using

加載模板使用的模板引擎的名稱。

Changed in Django 1.8:

添加status 和using 參數(shù)。
Changed in Django 1.7:

增加dirs 參數(shù)。
Deprecated since version 1.8:

廢棄dirs 參數(shù)。

示例

下面的示例渲染模板myapp/index.html,MIIME 類型為application/xhtml+xml

from django.shortcuts import render_to_response

def my_view(request):
    # View code here...
    return render_to_response('myapp/index.html', {"foo": "bar"},
        content_type="application/xhtml+xml")

這個示例等同于:

from django.http import HttpResponse
from django.template import Context, loader

def my_view(request):
    # View code here...
    t = loader.get_template('myapp/index.html')
    c = Context({'foo': 'bar'})
    return HttpResponse(t.render(c),
        content_type="application/xhtml+xml")

redirect

redirect(to, [permanent=False, ]*args, **kwargs)[source]

為傳遞進來的參數(shù)返回HttpResponseRedirect 給正確的URL 。

參數(shù)可以是:

  • 一個模型:將調(diào)用模型的get_absolute_url() 函數(shù)
  • 一個視圖,可以帶有參數(shù):將使用urlresolvers.reverse 來反向解析名稱
  • 一個絕對的或相對的URL,將原樣作為重定向的位置。

默認返回一個臨時的重定向;傳遞permanent=True可以返回一個永久的重定向。

Django 1.7 中的改變:

增加使用相對URL 的功能。

示例

你可以用多種方式使用redirect() 函數(shù)。

通過傳遞一個對象;將調(diào)用get_absolute_url() 方法來獲取重定向的URL:

from django.shortcuts import redirect

def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object)

通過傳遞一個視圖的名稱,可以帶有位置參數(shù)和關(guān)鍵字參數(shù);將使用reverse() 方法反向解析URL:

def my_view(request):
    ...
    return redirect('some-view-name', foo='bar')

傳遞要重定向的一個硬編碼的URL:

def my_view(request):
    ...
    return redirect('/some/url/')

完整的URL 也可以:

def my_view(request):
    ...
    return redirect('http://example.com/')

默認情況下,redirect() 返回一個臨時重定向。以上所有的形式都接收一個permanent 參數(shù);如果設(shè)置為True,將返回一個永久的重定向:

def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object, permanent=True)

get_object_or_404

get_object_or_404(klass, *args, **kwargs)[source]

在一個給定的模型管理器上調(diào)用get(),但是引發(fā)Http404 而不是模型的DoesNotExist 異常。

必選的參數(shù)

klass

獲取該對象的一個Model 類,ManagerQuerySet 實例。

**kwargs

查詢的參數(shù),格式應(yīng)該可以被get()filter()接受。

示例

下面的示例從MyModel 中使用主鍵1 來獲取對象:

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)

但是如果你的queryset 來自其它地方,它就會很有用了。

最后你還可以使用一個管理器。如果你有一個自定義的管理器,它將很有用:

get_object_or_404(Book.dahl_objects, title='Matilda')

你還可以使用關(guān)聯(lián)的 管理器:

author = Author.objects.get(name='Roald Dahl')
get_object_or_404(author.book_set, title='Matilda')

注:與get()一樣,如果找到多個對象將引發(fā)一個MultipleObjectsReturned 異常。

get_list_or_404

get_list_or_404(klass, *args, **kwargs)[source]

返回一個給定模型管理器上filter() 的結(jié)果,并將結(jié)果映射為一個列表,如果結(jié)果為空則返回Http404。

必選的參數(shù)

klass

獲取該列表的一個Model、ManagerQuerySet 實例。

**kwargs

查尋的參數(shù),格式應(yīng)該可以被get()filter() 接受。

示例

下面的示例從MyModel 中獲取所有發(fā)布出來的對象:

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 文檔協(xié)作翻譯小組,原文:Shortcuts。

本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉(zhuǎn)載請保留作者署名和文章出處。

Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606。