一、Django便捷函式
1、介紹
- 包
django.shortcuts
收集助手函式和“跨”多級mvc的類,換句話說,為了方便起見,這些函式/類引入受控耦合。
from django.shortcuts import render, HttpResponse,redirect,reverse,resolve_url
2、官方連結
- https://docs.djangoproject.com/zh-hans/3.2/topics/http/shortcuts/
二、render()
這個函式用於渲染模板並返回物件。它接收請求物件、模板名、上下文資料等引數,並返回一個響應物件。通常用於渲染 HTML 模板。
render(request, template_name, context=None, content_type=None, status=None, using=None)
1、引數
request
:請求物件。template_name
:要渲染的模板名稱。context
:包含要傳遞給模板的資料的字典。content_type
:響應的內容型別。status
:響應的狀態碼。using
:用於渲染模板的模板引擎的名稱。
2、示例
from django.shortcuts import render
def my_view(request):
context = {'foo': 'bar'}
return render(request, 'template_name.html', context)
三、redirect()
這個函式用於進行重定向,將使用者重定向到另一個 URL。它接收目標 URL 作為引數,並可選地指定是否永久重定向。使用這個函式可以方便地在檢視函式中進行重定向操作。
redirect(to, *args, permanent=False, **kwargs)
1、引數
to
:要重定向的 URL,可以是檢視函式、模型例項、URL 字串等。permanent
:是否執行永久重定向,預設為False
。
2、示例
from django.shortcuts import redirect
def my_view(request):
# 重定向到指定的 URL
return redirect('another_view')
def another_view(request):
# 重定向到相對 URL
return redirect('/some-url/')
3、補充
(1)預設返回臨時重定向
- 預設情況下,
redirect()
返回臨時重定向。 - 所有以上形式都接受
permanent
引數;如果設定為True
會返回一個永久重定向:
def my_view(request):
...
obj = MyModel.objects.get(...)
return redirect(obj, permanent=True)
(2)臨時重定向和永久重定向的區別
- 臨時重定向(響應狀態碼:302)和永久重定向(響應狀態碼:301)對普通使用者來說是沒什麼區別的,它主要面向的是搜尋引擎的機器人。
- A頁面臨時重定向到B頁面,那搜尋引擎收錄的就是A頁面。
- A頁面永久重定向到B頁面,那搜尋引擎收錄的就是B頁面。
四、get_object_or_404()
這個函式用於獲取資料庫中的物件,如果不存在則返回 404 錯誤頁面。它接收一個模型類以及可選的查詢引數,並返回查詢到的物件或者丟擲 Http404
異常。
1、引數
klass
:模型類。*args
和**kwargs
:用於過濾物件的查詢引數。
2、示例
from django.shortcuts import get_object_or_404
from myapp.models import MyModel
def my_view(request, object_id):
obj = get_object_or_404(MyModel, id=object_id)
return render(request, 'template.html', {'object': obj})
五、 get_list_or_404()
這個函式用於獲取資料庫中的物件列表,如果列表為空,則返回 404 錯誤頁面。
get_list_or_404(klass, *args, **kwargs)
1、引數
- 與
get_object_or_404()
類似,用於過濾物件列表的查詢引數。
2、示例
from django.shortcuts import get_list_or_404
from myapp.models import Book
from django.http import HttpResponse
from django.shortcuts import render
from django.http import Http404
def book_list(request):
# 獲取所有圖書的列表,如果列表為空則返回 404 錯誤頁面
books = get_list_or_404(Book)
# 如果列表不為空,可以繼續處理
context = {'books': books}
return render(request, 'book_list.html', context)