Django 将对象传递给重定向()

Django 将对象传递给重定向(),django,Django,我需要向重定向函数传递一个对象。是这样吗 redirect('/view', kwargs={'obj': obj}) def视图(请求,obj): 做点什么 我如何实现它以便url dispatcher接受它?我将使用: url(r'view/+',view,name='whatever'), 因为我传递的是一个对象,所以我没有使用url转换器(str、int、slug等),而是使用正则表达式来告诉url调度程序接受我传递给它的任何内容,不过这会给我带来一个错误 正确的方法是什么 redir

我需要向重定向函数传递一个对象。是这样吗

redirect('/view', kwargs={'obj': obj})
def视图(请求,obj):
做点什么

我如何实现它以便url dispatcher接受它?我将使用:

url(r'view/+',view,name='whatever'),

因为我传递的是一个对象,所以我没有使用url转换器(str、int、slug等),而是使用正则表达式来告诉url调度程序接受我传递给它的任何内容,不过这会给我带来一个错误

正确的方法是什么

redirect('/view', kwargs={'obj': obj})
我如何实现它以便url dispatcher接受它

你不能那样做。您无法通过URL(或其他任何内容)传递对象本身,或者至少在不使用大量“黑客”的情况下,通过使用诸如
pickle
之类的序列化程序传递对象本身,但这将生成巨大的URL(URL没有严格限制,但通常建议将URL保持在2000个字符以下)。如果在pickle流上使用base64编码,空字典将已经包含8个字符

不能将通用对象传递给URL。您只能将文本作为URL传递。您可以将整数转换为文本等。但严格来说,将泛型对象转换为文本是可以做到的(通过酸洗),但根本不建议这样做。它还可能公开Web服务器内部。例如,如果您的对象以某种方式引用Django设置,它可能会对数据库凭据进行编码,从而带来严重的安全风险

因此,您可以传递文本,或将某些数据转换为文本。为了处理这个问题,首先需要在
url
中定义一个参数。您还将如何捕获数据。因此,我们可以定义一个参数,如:

url(r'view/(?P<obj>.*)/$', view, name='whatever'),
url(r'view/(?P.*)/$,view,name='whatever'),
然后,您可以使用视图的名称生成重定向,并将参数作为命名参数传递:

redirect('whatever', obj='sometext')
redirect('whatever',obj='sometext')
然后将使用
obj
作为
'sometext'
调用
视图
。通常传递主键、slug等。这使得它易于读取、压缩,而且只向客户端公开少量数据