Jie*_*Wei 2 python django url frontend
我得到一个奇怪的问题.我正在创建一个将朋友添加到列表的功能,这是我的视图和网址.
@login_required(login_url='user:login')
def friend_add(request, friend):
friendship = FriendShip(
from_friend=request.user,
to_friend=friend
)
friendship.save()
return HttpResponseRedirect(request.path)
url(r'^add_friend/$', views.friend_add, name="add_friend"),
Run Code Online (Sandbox Code Playgroud)
我在模板中调用url:
<input type="button" class="btn btn-info" value="Add Friend" onclick="location.href='{% url 'user:add_friend' friend=post.poster %}';">
Run Code Online (Sandbox Code Playgroud)
加载网页时会发生异常:
使用关键字参数'{'friend':}找不到'add_friend'.尝试过1种模式:['users/add_friend/$']
经过几次尝试后,可以加载网页并删除输入
<input type="button" class="btn btn-info" value="Add Friend" onclick="location.href='{% url 'user:add_friend'%}';">
Run Code Online (Sandbox Code Playgroud)
(这很奇怪,因为视图要求输入)
但是,当我单击按钮时,会发生另一个异常:
friend_add()缺少1个必要的位置参数:'friend'
我对这个问题感到很困惑.真的很感激任何帮助!
注意:
path(..)可从Django- 2.0获得.
这里的问题friend是不在 URL中:
url(r'^add_friend/$', views.friend_add, name="add_friend"), # no parameter
Run Code Online (Sandbox Code Playgroud)
例如,您可以pk通过指定以下内容为朋友使用主键()path(..):
path(r'add_friend/<int:friend>/', views.friend_add, name="add_friend"),Run Code Online (Sandbox Code Playgroud)
如果你使用django-1.x,你可以使用url(..)正则表达式:
url(r'^add_friend/(?P<friend>[0-9]+)/$', views.friend_add, name="add_friend"),Run Code Online (Sandbox Code Playgroud)
现在我们可以在反向URL中使用朋友的主键:
<input
type="button"
class="btn btn-info"
value="Add Friend"
onclick="location.href='{% url 'user:add_friend' friend=post.poster.pk %}';"
>Run Code Online (Sandbox Code Playgroud)
(多行使其更容易阅读).