django重定向包含id的url

时间:2010-06-03 11:07:24

标签: django url redirect

我想在settings.py中添加如下声明:

LOGIN_REDIRECT_URL='^private_profile/(?P<id>\d+)/$'
#or 
LOGIN_REDIRECT_URL='/accounts/private_profile/id/'

这样当例如id为1的用户登录时,他将被重定向到

LOGIN_REDIRECT_URL='/accounts/private_profile/1/'

但两种选择,

LOGIN_REDIRECT_URL='^private_profile/(?P<id>\d+)/$'
#or 
LOGIN_REDIRECT_URL='/accounts/private_profile/id/'

是错误的,因为在我的浏览器中我没有看到当前的用户ID,我错在哪里? 感谢

5 个答案:

答案 0 :(得分:3)

当用户被记录时,作为视图的第一个参数传递的请求具有用户字段。因此,在您的视图中,您将知道记录了哪个用户:

def userProfile(request):
    print request.user

在我的项目中,我从未在网址中指定用户名,因为您的代码中已知用户。

答案 1 :(得分:2)

您可以将LOGIN_REDIRECT_URL设置为检查当前登录用户的ID的视图。然后,此视图可以将用户重定向到正确的位置。

登录 - &gt;查看检查当前用户ID - &gt;使用用户ID重定向到正确的页面

答案 2 :(得分:1)

实现这一目标的一个技巧是为每个人定义一个通用视图并将它们链接到该视图,这个视图可能如下所示:

from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required

@login_required
def after_login(request):
    return HttpResponseRedirect('/accounts/private_profile/%d/'%request.user.id)

但正如我在评论中所说的那样,这只是你真的想要在网址中使用用户ID,这大部分时间都不是必需的。正如您在我的视图中所看到的,您可以从请求上下文中获取用户ID,前提是django.contrib.auth.context_processors.auth已添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS设置

答案 3 :(得分:0)

我是这样做的。

#========== Login View ==========#
def login(request):
   #==login stuff==#
   return HttpResponseRedirect('/accounts/private_profile/'+user.id+'/')

#========== PROJECT urls.py ==========#
urlpatterns = patterns('',
   (r'^accounts/', include('my_project.accounts.urls')),
   (r'^login/', login),
)

#========== ACCOUNTS APP urls.py ==========#
urlpatterns = patterns('',
   (r'^private_profile/(?P<id>\d+)/', private_profile),
)

答案 4 :(得分:-1)

def登录(请求):

返回HttpResponseRedirect('/ accounts / private_profile /'+ str(user.id)+'/')