2013-10-10 107 views
0

我正在制作一个类似于twitter的应用程序。在每个个人资料页面上,当前登录的用户都有一个选项可以关注他们正在查看的个人资料页面。我有一个关注/取消关注按钮,它可以工作,但是,一旦点击它就会重定向到一个错误页面,但如果你回去刷新,你可以看到如果你正在关注他们,你现在正在取消关注他们。所以我的问题是一旦按钮被点击,我如何让它重定向到同一页面?URL重定向Django

这里是我的错误:*后

_reverse_with_prefix()参数必须是一个序列,而不是资料...

/家庭/ skybluep/thesite /熊猫/叽叽喳喳/视图。 PY在后续

65返回HttpResponseRedirect(反向( 'twitterindex:细节',ARGS =轮廓))

我的视图:

@login_required 
def follow(request, username): 
    profile = get_object_or_404(Profile, user__username=username) 
    user_profile = get_object_or_404(Profile, user=request.user) 
    user_profile.following.add(profile) 
    user_profile.save() 
    return HttpResponseRedirect(reverse('twitterindex:detail', args = profile)) 

@login_required 
def unfollow(request, username): 
    profile = get_object_or_404(Profile, user__username=username) 
    user_profile = get_object_or_404(Profile, user=request.user) 
    user_profile.following.remove(profile) 
    user_profile.save() 
    return HttpResponseRedirect(reverse('twitterindex:detail', args = profile)) 

我的应用网址

urlpatterns = patterns('', 
url(r'^$', views.index, name='twitterindex'), 
url(r'^detail/(?P<username>\w+)/$', views.detail, name='detail'), 
url(r'^detail/(?P<username>\w+)/newpost/$', views.post, name='newpost'), 
url(r'^detail/(?P<username>\w+)/follow', views.follow, name='follow'), 
url(r'^detail/(?P<username>\w+)/unfollow', views.unfollow, name='unfollow'), 

) 

回答

2

的错误是足够清晰的,你应该做的:

return HttpResponseRedirect(reverse('twitterindex:detail', args=(profile.user.username,))) 
0

尝试:return HttpResponseRedirect(reverse('twitterindex:detail', args = profile.user.username))。你也不必user_profile.save()

更好的方法:

@login_required 
def follow(request, username): 
    profile = get_object_or_404(Profile, user__username=username) 
    user_profile = get_object_or_404(Profile, user=request.user) 
    user_profile.following.add(profile)   
    return HttpResponseRedirect(reverse('twitterindex:detail', args = profile.user.username)) 

@login_required 
def unfollow(request, username): 
    profile = get_object_or_404(Profile, user__username=username) 
    user_profile = get_object_or_404(Profile, user=request.user) 
    user_profile.following.remove(profile)  
    return HttpResponseRedirect(reverse('twitterindex:detail', args = profile.user.username))