W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
將給定的模板與給定的上下文字典組合在一起,并以渲染的文本返回一個(gè) ?HttpResponse
?對(duì)象。
Django沒有提供返回 ?TemplateResponse
?的便捷函數(shù),因?yàn)??TemplateResponse
?的構(gòu)造函數(shù)提供了與 ?render()
? 同等程度的便利。
用于生成此響應(yīng)的請(qǐng)求對(duì)象。
要使用的模板的全名或模板名稱的序列。如果給定一個(gè)序列,則將使用存在的第一個(gè)模板。
要添加到模板上下文的值的字典。 默認(rèn)情況下,這是一個(gè)空的字典。 如果字典中的值是可調(diào)用的,則視圖將在渲染模板之前調(diào)用它。
用于結(jié)果文檔的 ?MIME類型。默認(rèn)?'text/html'? 。
響應(yīng)的狀態(tài)碼默認(rèn)為 200。
用于加載模板的模板引擎的 ?NAME。
例如:
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')
這個(gè)例子相當(dāng)于:
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')
返回一個(gè) ?HttpResponseRedirect
?,指向傳遞參數(shù)的適當(dāng) URL。
參數(shù)可以是:
get_absolute_url()
? 函數(shù)將被調(diào)用。reverse()
? 將被用于反向解析名稱。默認(rèn)情況下發(fā)出臨時(shí)重定向;通過傳遞 ?permanent=True
? 發(fā)出永久重定向。
例如:
你可以通過多種方法使用 ?redirect()
? 函數(shù)。
1、傳遞對(duì)象,對(duì)象的 ?get_absolute_url()
? 方法將被調(diào)用來指向重定向地址:
from django.shortcuts import redirect
def my_view(request):
...
obj = MyModel.objects.get(...)
return redirect(obj)
2、傳遞視圖名和一些可選的位置或關(guān)鍵字參數(shù);URL 將使用 ?reverse()
? 方法來反向解析:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
3、傳遞硬編碼 URL 來重定向:
def my_view(request):
...
return redirect('/some/url/')
這也適用于完整的 URL :
def my_view(request):
...
return redirect('https://example.com/')
默認(rèn)情況下,?redirect()
?返回臨時(shí)重定向。所有以上形式都接受 ?permanent
?參數(shù);如果設(shè)置為 ?True
?會(huì)返回一個(gè)永久重定向:
def my_view(request):
...
obj = MyModel.objects.get(...)
return redirect(obj, permanent=True)
在給定的模型管理器( model manager) 上調(diào)用 ?get()
? ,但它會(huì)引發(fā) ?Http404
?而不是模型的 ?DoesNotExist
?異常。
Model
?類, ?Manager
?,或 ?QuerySet
?實(shí)例。get()
? 和 ?filter()
? 接受的格式。例如:
下面的例子是展示從 ?MyModel
?中獲取主鍵為1的對(duì)象:
from django.shortcuts import get_object_or_404
def my_view(request):
obj = get_object_or_404(MyModel, pk=1)
此示例相當(dāng)于:
from django.http import Http404
def my_view(request):
try:
obj = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404("No MyModel matches the given query.")
如上所示,最常用的使用案例是傳遞 ?Model
?。但是,你也可以傳遞一個(gè) ?QuerySet
?實(shí)例:
queryset = Book.objects.filter(title__startswith='M')
get_object_or_404(queryset, pk=1)
以上例子有點(diǎn)冗長,因?yàn)樗韧冢?/p>
get_object_or_404(Book, title__startswith='M', pk=1)
但如果你是從其他地方傳遞的 ?queryset
?變量,那它會(huì)很有用。
最后,你也可以使用 ?Manager
?。如果你有自定義管理器( ?custom manager
? )會(huì)很有用:
get_object_or_404(Book.dahl_objects, title='Matilda')
你也可以使用關(guān)聯(lián)管理器( ?related managers
? ):
author = Author.objects.get(name='Roald Dahl')
get_object_or_404(author.book_set, title='Matilda')
注意:與 ?get()
? 一樣,如果查詢結(jié)果有多個(gè)對(duì)象,那么會(huì)引發(fā) ?MultipleObjectsReturned
?異常。
filter()
? 轉(zhuǎn)換為列表的結(jié)果,如果結(jié)果列表為空,則引發(fā) ?Http404
?。Model
?,?Manager
?或 ?QuerySet
?實(shí)例。get()
? 和 ?filter()
? 接受的格式。例如:
下面的例子展示從 ?MyModel
?中獲取所有 ?published=True
? 的對(duì)象:
from django.shortcuts import get_list_or_404
def my_view(request):
my_objects = get_list_or_404(MyModel, published=True)
此示例相當(dāng)于:
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.")
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: