2009-07-30 42 views
18

我正在編寫一個基於成員的Web應用程序,我需要能夠在登錄後重定向頁面。我想在我的views.py文件的urls.py腳本中使用命名的url作爲登錄應用程序,但是我不知道該怎麼做。我所擁有的是這樣的:Django和urls.py:我如何通過指定的URL HttpResponseRedirect?

def login(request): 
if request.session.has_key('user'): 
    if request.session['user'] is not None: 
     return HttpResponseRedirect('/path/to/page.html') 

我想做到的是一樣的東西:

def login(request): 
if request.session.has_key('user'): 
    if request.session['user'] is not None: 
     return HttpResponseRedirect url pageName 

我得到的語法錯誤,當我執行此,任何想法?

回答

34

您需要使用reverse() utils函數。

from django.core.urlresolvers import reverse 

def myview(request): 
    return HttpResponseRedirect(reverse('arch-summary', args=[1945])) 

args滿足你的URL的正則表達式的參數。您也可以通過傳遞字典來提供指定的參數。

+0

真棒, 謝謝您的幫助!我一定是在搜索django文檔時都是錯的。 – 2009-07-30 19:44:55

7

一個更簡潔的寫法,如果陳述將是if request.session.get('user')。 has_key現在不推薦使用,.get()返回None(默認情況下,可通過傳遞第二個參數進行更改)。 因此,與Soviut的答覆相結合這樣的:

from django.core.urlresolvers import reverse 

def login(request): 
    if request.session.get('user'): 
     return HttpResponseRedirect(reverse('my-named-url')) 
4

正確的答案,從Django 1.3 onwards,其中重定向方法隱含地做一個反向調用,就是:

from django.shortcuts import redirect 

def login(request): 
    if request.session.get('user'): 
     return redirect('named_url') 
相關問題