Django - 按钮网址
Posted
技术标签:
【中文标题】Django - 按钮网址【英文标题】:Django - button url 【发布时间】:2018-06-08 20:12:45 【问题描述】:我有一个奇怪的问题。我正在创建一个将朋友添加到列表的功能,这是我的视图和网址。
@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 %';">
在加载网页时会发生异常:
找不到关键字参数“'friend': ”的“add_friend”。尝试了 1 种模式:['users/add_friend/$']
经过多次尝试,网页可以在删除输入的情况下加载
<input type="button" class="btn btn-info" value="Add Friend" onclick="location.href='% url 'user:add_friend'%';">
(这很奇怪,因为视图要求输入)
但是,当我点击按钮时,会发生另一个异常:
friend_add() 缺少 1 个必需的位置参数:'friend'
我对这个问题感到非常困惑。非常感谢您的帮助!
【问题讨论】:
【参考方案1】:注意:
path(..)
可从 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中使用好友的主键了:
<input
type="button"
class="btn btn-info"
value="Add Friend"
onclick="location.href='% url 'user:add_friend' friend=post.poster.pk %';"
>
(多行以便于阅读)。
【讨论】:
注意:path
仅在 django 2.0 中可用。对于 url。
@ABDULNIYASPM 真的很感激!我正要问'路径'
对,我在 url 中遗漏了那个。感谢您的帮助!
@ABDULNIYASPM:谢谢。更新了 django-1.x 的备注和替代方案:)。
@WillemVanOnsem 如果您使用的是正则表达式,它不应该是 re_path 而不是旧的捕获语法,如果您使用的是路径捕获语法,则只是文本【参考方案2】:
你的 urlpattern 也应该有这样的朋友参数:
url(r'^add_friend/(?P<friend>[0-9]+)/$', views.friend_add, name="add_friend"),
这将允许您将朋友对象的整数 id 传递给像 add_friend/12
这样的 url。
【讨论】:
哦,对了,那部分不见了,谢谢你的帮助!【参考方案3】:data-ajax-target 在 html 按钮中调用 Django 的特定 URL
<button type="Submit" value="Submit" class="btn btn-outline-light text-dark" data-ajax-target="% url 'collections' %?collection= collection.collectionID " ">
<span> collection.choice_label </span>
</button>
【讨论】:
以上是关于Django - 按钮网址的主要内容,如果未能解决你的问题,请参考以下文章