我需要返回RedirectView。这些都不起作用:
class FooView(View):
return SomeRedirectView
class FooView(View):
return SomeRedirectView.as_view()
class FooView(View):
return HTTPResponseRedirect(SomeRedirectView)
如何返回RedirectView?
编辑:伙计们,我的想法是我需要从Class返回。但看起来像是不这样做。那么一个人如何从一个班级回来?
编辑2:抱歉,我还不清楚。我知道如何使用单个RedirectView重定向用户。我有一个RedirectView:
class MyRedirectView(RedirectView):
def get_redirect_url():
return 'www.google.com'
我需要将MyRedirectView
作为单独的视图,因为它在某处被用作独立的View。但后来我完全没有其他View,它必须使用逻辑,然后“调用”MyRedirectView
。
问题是,SomeOtherView
如何看起来像? (不 MyRedirectView
)
class SomeOtherView(View):
def get():
return MyRedirectView ????
解决方案:在其他SO成员的帮助下,我得出的结论是我的想法是错误的。我没有重复代码,我可以使用函数。我无法调用类或返回视图。但是我可以使用公共函数并从MyRedirectView和FooView(或任何其他视图)中调用它。
感谢大家的帮助和良好的讨论!
答案 0 :(得分:2)
我不知道为什么你认为你需要返回一个视图。如果现有视图需要返回重定向,那么您应该这样做:
from django.shortcuts import redirect
class SomeOtherView(View):
def get(request):
... logic here...
return redirect(my_redirect_destination)
答案 1 :(得分:1)
从docs,您的观点需要成为RedirectView
的子类:
from django.core.urlresolvers import reverse
from django.views.generic.base import RedirectView
class MyRedirectView(RedirectView):
permanent = False
query_string = True
def get_redirect_url(self, pk):
return reverse('example', args=(pk,))
Here's a good example使用基础RedirectView
虽然您没有提及urls.py
个文件,但您需要在其中调用MyRedirectView.as_view()
。再次,在文档中的很好的例子。这是要点:
from views import MyRedirectView
urlpatterns = patterns('',
url(r'^someURL/$', MyRedirectView.as_view(), name='my-redirect-view'),
...
)