Django - 重定向到上一页

问题描述 投票:0回答:1

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

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

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"),

它引发了一个例外:

使用关键字参数“{'to_friend_id':1,'path':'/ forum / 1/0 / post'}'找不到”add_friend“的反转。 1个模式尝试:['users / add_friend /(?P [0-9] + /)/(?P [\ w \ - ] +)$']

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

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

真的非常感谢!

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

django backend
1个回答
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中。

© www.soinside.com 2019 - 2024. All rights reserved.