【问题标题】:Django - button urlDjango - 按钮网址
【发布时间】: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'

我对这个问题感到非常困惑。非常感谢您的帮助!

【问题讨论】:

    标签: python django url frontend


    【解决方案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>&lt;int:friend&gt;/</b>', views.friend_add, name="add_friend"),

    如果您使用,您可以使用带有正则表达式的url(..)

    <b>url</b>(r'^add_friend/<b>(?P&lt;friend&gt;[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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      相关资源
      最近更新 更多