如何重定向到带参数的视图?

2 投票
2 回答
3230 浏览
提问于 2025-04-16 15:04

我正在尝试按照Django中重定向的说明进行操作。我想先重定向到一个页面,然后再重定向回去。以下是我的代码:

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 at / 反向查找 'update_session_from_ldap' 时出现问题,参数 '()' 和关键字参数 '{'next': 'home'}' 找不到。

我哪里做错了呢?

2 个回答

2

你在视图中的做法是对的,只是网址里缺少了一个叫 next 的参数:

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

不过我注意到你在 update_session_from_ldap 里没有使用 next 这个参数。如果你想一直跳转到“首页”,而不管 next 的话,就把它从视图里去掉,保持你原来的 url 不变。

1

除了manji提到的内容,你还需要使用完整的URL名称,或者完整的函数引用。你不能只用函数引用的最后一部分。

所以,你可以选择:

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

或者

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

撰写回答