我正在创建将好友添加到用户的好友列表的功能。用户单击该按钮后,将创建友谊,并将页面重定向到用户所在的位置。例如,我想在论坛的第一页中添加另一个用户,我点击"添加好友"后我应该留在同一页面按钮。
这就是我的设计方式: 当我重定向到论坛的任何页面时,我将当前页面的路径作为页面中的变量传递:
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
答案 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
。