2011-04-04 23 views
2

我正在尝试遵循Django中redirect的指示。我想重定向到一个页面,然后再重定向回去。这里是我的代码:如何使用参数重定向到视图?

def home(request): 
    current_user = None 
    if 'user_id' in request.session.keys(): 
     current_user = request.session['user_id'] 
    else: 
     return redirect('update_session_from_ldap', next='home') 
def update_session_from_ldap(request,next): 
    remote_user = request.META.get('REMOTE_USER', None) 
    request.session['user_id'] = remote_user 
    request.session.set_expiry(0) # Expire with browser session. 
    return redirect('home') 

当我去的网页,我得到:

NoReverseMatch在/反向的 与 参数 'update_session_from_ldap' '()' 和关键字参数 '{'下一个':'家'}'找不到。

我在做什么错?

+3

不可能说没有看到URL配置为'update_session_from_ldap'。 – 2011-04-04 18:04:50

+0

谢谢,它只是'url(r'^ ldap/$','library.views.update_session_from_ldap',name =“ldap”),' - 我是否通过参数错误?如何将参数直接传递给视图而不是URL? – AP257 2011-04-04 18:11:35

回答

1

除了manji说的,你需要使用URL的名称或全功能参考。您不能只使用函数引用的最后部分。

所以,要么:

return redirect('library.views.update_session_from_ldap', next='home') 

return redirect('ldap', next='home') 
+0

这就是我所缺少的,谢谢。 – AP257 2011-04-04 22:11:45

2

你的观点做什么是正确的,它只是在参数next从URL中缺少:

url(r'^/ldap/(?P<next>\w+)/$', 
    'library.views.update_session_from_ldap', 
    name="ldap") 

但我看到你没有使用next参数update_session_from_ldap。如果您想始终重定向至“家”并忽略next,请将其从视图中移除并保留原始url

+0

不幸的是,这并没有帮助 - 仍然得到NoReverseMatch :(重新下一个参数:最终我想重定向到下一个动态 - 一旦我已经想出了如何做重定向... – AP257 2011-04-04 21:42:32

+0

澄清一点:通过上面的URL更改,我现在可以执行'/ ldap/home'并使其正确重定向:我不能使用相同的NoReverseMatch调用'return redirect('update_session_from_ldap',next ='home')'错误 – AP257 2011-04-04 21:43:35