在Django中,可以通过重写基于类的泛型视图中的get_success_url
方法来实现重定向到?next=url
而不是success_url
。
首先,需要导入django.shortcuts.redirect
模块,然后在视图类中重写get_success_url
方法。在该方法中,可以通过self.request.GET.get('next')
获取到?next=url
中的url
参数,并将其作为重定向的目标。
以下是一个示例代码:
from django.shortcuts import redirect
from django.views.generic import CreateView
from django.urls import reverse_lazy
class MyCreateView(CreateView):
model = MyModel
# 其他视图配置...
def get_success_url(self):
next_url = self.request.GET.get('next')
if next_url:
return next_url
else:
return reverse_lazy('success_url_name')
在上述示例中,MyCreateView
是一个继承自CreateView
的自定义视图类。在get_success_url
方法中,首先使用self.request.GET.get('next')
获取到?next=url
中的url
参数,如果存在则返回该参数作为重定向的目标,否则返回success_url
的名称(通过reverse_lazy
函数获取对应的URL)。
这样,在使用MyCreateView
视图类创建对象成功后,如果URL中存在?next=url
参数,则会重定向到该参数指定的URL,否则会重定向到success_url
指定的URL。
希望以上信息对您有所帮助。如果您需要了解更多关于Django的知识或其他云计算领域的问题,请随时提问。