Django便捷函式shortcuts

Xiao0101發表於2024-04-09

一、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)

相關文章