【问题标题】:NoReverseMatch at / Reverse for 'delete_order' with arguments '('',)' not found. 1 pattern(s) tried: ['delete_order/(?P<pk>[^/]+)/$'] [closed]NoReverseMatch at / Reverse for 'delete_order' 未找到参数 '('',)'。尝试了 1 种模式:['delete_order/(?P<pk>[^/]+)/$'] [关闭]
【发布时间】:2020-07-20 16:30:57
【问题描述】:

我正在使用&lt;str:pk&gt; 删除表中的特定数据。但这不起作用。我按照教程无济于事,这是我得到的:

NoReverseMatch at /

未找到带有参数“('',)' 的“delete_order”的反向操作。尝试了 1 种模式:['delete_order/(?P[^/]+)/$']

views.py

def deleteOrder(request, pk):
    order = anime.objects.get(id=pk)
    if request.method == "POST":
        order.delete()
        return redirect('/')

    context={'list':order}
    return render(request, 'main/delete.html',context)

table.html

    <td><a href="" class="btn btn-success">Update</a></td>
    <td><a href="{% url 'delete_order' order.id %}" class="btn btn-danger">Delete</a></td>
</tr>
</tbody>
{% endfor %}

urls.py

urlpatterns = [
    path('',views.homepage,name ="homepage"),
    path('anime/',views.addAnime,name="anime"),
    path('delete_order/<str:pk>/', views.deleteOrder, name="delete_order"),
]

我似乎找不到我的代码有什么问题。

【问题讨论】:

  • 请在您的模板中添加for 开启代码和呈现table.html 的视图代码,而不是delete.html
  • 显然 - 从错误消息中 - order.id 无法解析为模板中的有效值(因此 url 标记看到的是一个空字符串)。现在为什么会这样,没有人可以从您发布的内容中看出,所以请提供正确的minimal reproducible example
  • 您将list 传递给您的模板,而不是order。所以在你的模板中你需要使用list.id。或者将你的上下文变量重命名为order

标签: django django-templates django-urls


【解决方案1】:

您的 table.html 似乎不知道 order.id 的值。我希望呈现 table.html 的视图通过上下文参数将order 传递给模板。我认为这也是 Ivan Starostin 的建议。所以在这个视图中你会想要类似的东西

context = {
        'order': order,
    }
return render(request, 'table.html', context))

更多信息请参见https://docs.djangoproject.com/en/3.0/intro/tutorial03/#a-shortcut-render

【讨论】:

  • 您没有通过request 传递它,您只是将order 添加到呈现模板的上下文中。
  • 你说的很对,我编辑了,谢谢
猜你喜欢
  • 2022-07-04
  • 2019-04-17
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2016-03-18
  • 2020-10-14
  • 2018-11-25
相关资源
最近更新 更多