Django - 重定向到上一页

时间:2017-12-29 08:04:01

标签: django backend

我正在创建将好友添加到用户的好友列表的功能。用户单击该按钮后,将创建友谊,并将页面重定向到用户所在的位置。例如,我想在论坛的第一页中添加另一个用户,我点击"添加好友"后我应该留在同一页面按钮。

这就是我的设计方式: 当我重定向到论坛的任何页面时,我将当前页面的路径作为页面中的变量传递:

def to_post_page(request, post_id, page_nr):
    post = get_object_or_404(Post, id=post_id)
    form = CommentForm()
    comments = Comment.objects.filter(post=post)
    return render(request, 'post/post.html', {
        'post': post,
        'form': form,
        'comments': comments,
        'page_nr': int(page_nr),
        'user': request.user,
        'path': request.path,
    })

在模板中:

<input type="button" class="btn btn-info" value="Add Friend" onclick="location.href='{% url 'user:add_friend' to_friend_id=post.poster.id path=path %}';">

@login_required(login_url='user:login')
def friend_add(request, to_friend_id, path):
    friend = get_object_or_404(User, id=to_friend_id)
    if friend == request.user:
        return HttpResponseRedirect(request.path)

    friendship = FriendShip(
        from_friend=request.user,
        to_friend=friend
    )

    try:
        friendship.save()
    except IntegrityError:
        return path
    finally:
        return path

我的网址看起来像这样:

url(r'^add_friend/(?P<to_friend_id>[0-9]+/)/(?P<path>[\w\-]+)/$', views.friend_add, name="add_friend"),

它引发了一个例外:

  

反向&#39; add_friend&#39;使用关键字参数&#39; {&#39; to_friend_id&#39;:1,&#39;路径&#39;:&#39; / forum / 1/0 / post&#39;}&#39;未找到。尝试了1种模式:[&#39; users / add_friend /(?P [0-9] + /)/(?P [\ w \ - ] +)$&#39;]

任何机构都可以解释为什么会引发异常以及解决方案是什么?不是为字符串参数设计的吗?

我认为我重定向到上一页的方式不是很聪明。有没有人有更好的方法?

非常感谢!

这个问题没有重复到this question因为他正在使用表格,但我不是。我无法获得POST

1 个答案:

答案 0 :(得分:0)

/正则表达式中删除to_friend,因为它最终会包含它。

/添加到path正则表达式部分,因为它不包含在\w(字母数字:[0-9a-zA-Z_])中。

这应该有效:

url(r'^add_friend/(?P<to_friend_id>[0-9]+)/(?P<path>[\w\-/]+)/$', views.friend_add, name="add_friend"),

同样在您的friend_add中,您最终不能只返回path。将其括在HttpResponseRedirect