在没有创建视图的情况下在django中重定向的最明智的方法

时间:2012-11-10 18:29:44

标签: django redirect

任务很简单:

If user visits site root then:
    if user is authenticated then:
        redirect to /dashboard/
    else:
        redirect to settings.LOGIN_URL

有很多方法可以实现这一点,但我想知道是否有这样的方式我需要使用 urls.py。

我找到了一个使用RedirectView login_required(RedirectView.as_view(url=my_url))的解决方案,但是我只能编写静态my_url而不是rev​​erse(),这不灵活。

2 个答案:

答案 0 :(得分:1)

您可以在url配置中使用reverse_lazy(Django 1.4),如下所示:

from django.conf.urls.defaults import url, patterns
from django.core.urlresolvers import reverse_lazy
from django.shortcuts import redirect

urlpatterns = patterns('',
    url(r'^/$', lambda request: return redirect(reverse_lazy('url_name')),
)

另一种可能性是使用LOGIN_URL定义reverse_lazy,因此您可以继续在重定向中使用settings.LOGIN_URL

代码未经测试,某处可能有拼写错误。

答案 1 :(得分:1)

您只需将LoginRequired混合到您的视图中即可。你可以在这里找到一个mixin的例子:

http://djangosnippets.org/snippets/2442/

然后在那里定义该视图,你只需:

class RedirectView(LoginRequiredMixin, DetailView):
    ....

或者您继承的任何基于类的视图。希望有所帮助!