返回重定向视图
我需要返回一个重定向视图(RedirectView)。但这些方法都不行:
class FooView(View):
return SomeRedirectView
class FooView(View):
return SomeRedirectView.as_view()
class FooView(View):
return HTTPResponseRedirect(SomeRedirectView)
我该怎么返回重定向视图呢?
编辑:大家,我的意思是我需要从一个类中返回。但看起来不是这样做的。那么,从一个类中该怎么返回呢?
编辑2:抱歉,我没有说清楚。我知道怎么用单个重定向视图来重定向用户。我有一个重定向视图:
class MyRedirectView(RedirectView):
def get_redirect_url():
return 'www.google.com'
我需要把MyRedirectView
作为一个单独的视图,因为它在其他地方作为独立视图使用。但我还有一个完全不同的视图,它需要使用一些逻辑,然后“调用”MyRedirectView
。
问题是,SomeOtherView
应该是什么样子的?(不是 MyRedirectView
)
class SomeOtherView(View):
def get():
return MyRedirectView ????
解决方案:在其他StackOverflow成员的帮助下,我意识到我的想法是错的。我不需要重复代码,可以使用函数。我不能直接调用类或返回视图。但我可以使用公共函数,并在MyRedirectView
和FooView
(或其他任何视图)中调用它。
感谢大家的帮助和精彩讨论!
2 个回答
1
根据文档,你的视图需要是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,))
这里有一个很好的例子,使用了基础的RedirectView
虽然你没有提到你的urls.py
文件,但你需要在里面调用MyRedirectView.as_view()
。文档中有很好的例子。这里是重点:
from views import MyRedirectView
urlpatterns = patterns('',
url(r'^someURL/$', MyRedirectView.as_view(), name='my-redirect-view'),
...
)
2
我不明白你为什么觉得一定要返回一个视图。如果你现在的视图需要返回一个重定向,那你就直接这么做就行了:
from django.shortcuts import redirect
class SomeOtherView(View):
def get(request):
... logic here...
return redirect(my_redirect_destination)