Django - 按钮网址

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'

我对这个问题感到很困惑.真的很感激任何帮助!

Wil*_*sem 6

注意: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)

如果你使用,你可以使用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)

(多行使其更容易阅读).

  • 注意:`path`仅在django 2.0中可用.对于django版本<2.0,请使用`url`代替. (2认同)