2012-11-10 14 views
1

任務很簡單:最聰明的方式在Django重定向,而無需創建視圖

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(),這是不靈活的。

回答

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')), 
) 

另一種可能性是使用reverse_lazy定義LOGIN_URL,所以你可以繼續在重定向使用settings.LOGIN_URL

代碼未經測試,可能在某處存在拼寫錯誤。

1

您只需要將LoginRequired混入您的視圖。你可以在這裏找到混入的例子:

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

然後,你定義視圖,你只是做:

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

或者任何基於類的查看你繼承。希望有所幫助!

相關問題