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

 

你可能感兴趣的:(python,django,恰饭)