Django中在函數中返回頁面的方法總結

1.使用render,可以返回模板頁面同時可附帶數據(json格式)用於展示。

from django.shortcuts import render

def test(request):
    data = {'success': 0}
    return render(request, 'show.html', {'data': data})

在render中也可以不帶數據,僅返回頁面進行展示。

from django.shortcuts import render

def test(request):
    return render(request, 'show.html')

2.使用HttpResponse返回字符串,頁面中將以不帶格式的文本方式在頁面中僅展示這串字符。

from django.http import HttpResponse

def test(request):
    return HttpResponse("test")

3.使用HttpResponseRedirect重定向頁面。

from django.http import HttpResponseRedirect

def test(request):

    return HttpResponseRedirect('/') #轉向首頁

令當前請求從一個視圖轉到另外一個視圖,此時不直接展示任何數據,直接向新的頁面uel發起請求,其中的參數字符串爲新的頁面路徑,例如'/index/',應在urls.py文件中的urlpatterns參數中配置index頁面的路由。

4.使用redirect方法重定向URL。

from django.shortcuts import redirect
from django.urls import reverse

# 案例1
def my_view(request):
    ...
    return redirect('/index/')

# 案例2
def my_view(request):
    ...
    return redirect('https://www.baidu.com/')

# 案例3
def my_view(request):
    ...
    return redirect(reverse('blog:article_list'))

HttpResponseRedirect能支持的URL重定向,redirect都支持。

5.使用reverse方法,對已命名的URL進行反向解析並傳遞相應的參數(args或帶key的參數kargs)。

# 使用方法一:模型中自定義get_absolute_url,並傳遞參數args

from django.urls import reverse

def get_absolute_url(self):
    return reverse('blog:article_detail', args=[str(self.pk), self.slug])

# 使用方法二:或者在視圖中對命名URL進行解析,傳遞參數kargs,再使用HttpResponseDirect和redict進行重定向

from django.urls import reverse
from django.shortcuts import redirect

def my_view(request):
    ...
    return redirect(reverse('admin:app_list', kwargs={'app_label': 'auth'}))

# 或者: return HttpResponseRedirect(reverse('blog:article_list'))

6.使用render_to_response返回頁面。

from django.shortcuts import render_to_response

def current_datetime(request):
    data = {'success': 0}
    return render_to_response('test.html', {'data': data})

render_to_response()完成了加載模板、填充 context 、將經解析的模板結果返回爲 HttpResponse 對象的過程。

 

參考文檔

①URL重定向的HttpResponseDirect, redirect和reverse的用法詳解:

https://blog.csdn.net/weixin_42134789/article/details/81505963

②render 和 render_to_response的區別:

https://www.jianshu.com/p/f9455da2fc97

③用django實現url跳轉的幾種方法總結:

https://blog.csdn.net/lvze0321/article/details/53302189

④其他:

https://blog.csdn.net/zhaoyangjian724/article/details/79019451
https://www.jianshu.com/p/4b56516e0741
https://blog.csdn.net/qq_37035946/article/details/90713994

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章