我有一个奇怪的问题。我正在创建一个将 friend 添加到列表的功能,这是我的 View 和 url。
@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"),
当我调用模板中的 url 时:
<input type="button" class="btn btn-info" value="Add Friend" onclick="location.href='{% url 'user:add_friend' friend=post.poster %}';">
加载网页时会发生异常:
Reverse for 'add_friend' with keyword arguments '{'friend': }' not found. 1 pattern(s) tried: ['users/add_friend/$']
经过多次尝试,网页可以加载并删除输入
<input type="button" class="btn btn-info" value="Add Friend" onclick="location.href='{% url 'user:add_friend'%}';">
(这很奇怪,因为 View 要求输入)
但是,当我点击按钮时,另一个异常发生了:
friend_add() missing 1 required positional argument: 'friend'
我对这个问题感到很困惑。非常感谢您的帮助!
最佳答案
Note:
path(..)
is available from Django-2.0.
这里的问题是 friend
在 URL 中不:
url(r'^add_friend/$', views.friend_add, name="add_friend"), # no parameter
例如,您可以通过指定 path(..)
为好友使用主键 (pk
) :
path(r'add_friend/<b><int:friend>/</b>', views.friend_add, name="add_friend"),
如果您使用 django-1.x , 你可以使用 url(..)
使用正则表达式:
<b>url</b>(r'^add_friend/<b>(?P<friend>[0-9]+)/</b>$', views.friend_add, name="add_friend"),
现在我们可以在反向 url 中使用 friend 的主键:
<input
type="button"
class="btn btn-info"
value="Add Friend"
onclick="location.href='{% url 'user:add_friend' friend=post.poster<b>.pk</b> %}';"
>
(多行以使其更易于阅读)。
关于python - Django - 按钮网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48004776/