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