返回重定向视图

1 投票
2 回答
879 浏览
提问于 2025-04-18 15:40

我需要返回一个重定向视图(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成员的帮助下,我意识到我的想法是错的。我不需要重复代码,可以使用函数。我不能直接调用类或返回视图。但我可以使用公共函数,并在MyRedirectViewFooView(或其他任何视图)中调用它。

感谢大家的帮助和精彩讨论!

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)

撰写回答