Py学习  »  Django

Django 知识库:redirect()重定向

FullStack程序猿 • 3 年前 • 522 次点击  
上一节我们已经领教到 redirect()reverse() 配合使用的强大威力了。

redirect() 的能力并不止于此。它可以接受 3 中不同的参数:

Model 作为参数

redirect() 可以接收模型作为第一个参数,像这样:

def redirect_view(request, id):
    ...
    obj = SomeModel.objects.get(id=id)
    return redirect(obj)

此时 redirect() 会调用模型实例中的 get_absolute_url() 方法,所以你必须在模型中加上它:

class SomeModel(...)
    ...
    def get_absolute_url(self):

        return reverse('some_url', args=(self.id,))

reverse() 的用法上一节讲过了。

路由部分的写法像这样:

...
path('...', redirect_view, name='...'),
path('...', destination_view, name='some_url')

所以当你请求 redirect_view() 时,redirect() 就帮你跳转到 destination_view() 视图中去了。

View 作为参数

如果你在 url 中有如下需要跳转的地址:

path('...', another_view, name='another_url'),

你还可以通过视图的命名作为参数:

return redirect('another_url', id=id)

依然可以用关键字参数传递变量到被跳转的视图中。

reverse() 的章节中我们是这样写的:return redirect(reverse('foo_name'))。两种写法本质上是一样的,路由都是由 reverse() 解析的,只不过 Django 隐式帮你处理了。

URL 作为参数

第三种方式就更加粗暴了,把 url 字符串作为参数:

return redirect('/your_url/{}/'.format(post.id))

参数也可以通过字符串格式化传递进去,不过这种方式属于硬编码,还是少用为好。

导入路径在这里:

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


?time=1589313613.84
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62834
 
522 次点击