【问题标题】:Django: No ReverseMatch. How to reverse to the previous URL?Django:没有反向匹配。如何反转到上一个 URL?
【发布时间】:2021-04-21 22:16:23
【问题描述】:

我有一个模型类Client,这个模型对象的 URL 是

<local_server>/object_id/

其中object_id 是模型Client 的对象的id

现在,当我访问此 URL 时,页面上有一个名为 Add Installment 的按钮,用于添加该特定 Client 的分期付款。当我单击此按钮时,它会将我带到以下 URL:

<local_server>/object_id/add_installment

现在,如果我添加新的分期付款,它可以正常工作。但是Add Installment 页面有两个按钮,AddCancel。我想要如果我点击Cancel 它应该返回到以下 URL:

<local_server>/object_id/

为此,我有以下模板用于添加分期付款,您可以在其中看到Cancel 按钮。

installment_form.html

{% extends "client_management_system/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content_section">
    <form method="post">
      {% csrf_token %}
      <fieldset class="form-group">
        <legend class="border-bottom mb-4"> Add New Installment</legend>
        {{ form|crispy }}
      </fieldset>
      <div class="form-group">
        <button class="btn btn-outline-success" type="submit">Add Installment</button>
        <a class="btn btn-outline-danger" type = "submit" href="{%  url 'client_details' object.id %}" >Cancel</a>
      </div>
    </form>
</div>

{% endblock %}

Cancel 按钮中,client_details 是 URL &lt;local_server&gt;/object_id 的名称。我在该行中写了object.id,但是当我点击Add Installment 时出现以下错误:

NoReverseMatch at /1/Add-Installment
Reverse for 'client_details' with arguments '('',)' not found. 1 pattern(s) tried: ['(?P<pk>[0-9]+)\\/$']
Request Method: GET
Request URL:    http://127.0.0.1:8000/1/Add-Installment
Django Version: 3.2
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'client_details' with arguments '('',)' not found. 1 pattern(s) tried: ['(?P<pk>[0-9]+)\\/$']
Exception Location: /anaconda3/lib/python3.6/site-packages/django/urls/resolvers.py, line 694, in _reverse_with_prefix
Python Executable:  /anaconda3/bin/python3
Python Version: 3.6.10
Python Path:    
['/Users/razajaved/Documents/installment_plan',
 '/anaconda3/lib/python36.zip',
 '/anaconda3/lib/python3.6',
 '/anaconda3/lib/python3.6/lib-dynload',
 '/anaconda3/lib/python3.6/site-packages',
 '/anaconda3/lib/python3.6/site-packages/aeosa']
Server time:    Wed, 21 Apr 2021 20:49:32 +0000

有人可以帮我吗?

【问题讨论】:

  • 模板中的变量object.id 似乎有问题,它可能不是您期望的“object.id”
  • 是的,似乎 object.id 引用了由于我点击取消而未创建的分期付款对象的 ID。

标签: python django django-models django-views django-templates


【解决方案1】:

我找到了两种方法:

通过替换我的 html 文件中的以下行返回到上一个 URL &lt;local_server&gt;/object_id/

<a class="btn btn-outline-danger" type = "submit" href="{%  url 'client_details' object.id %}" >Cancel</a>

用这个:

<input type=button class="btn btn-outline-danger" value="Cancel" onClick="window.history.back();return false;">

或者用这个:

<a class="btn btn-outline-danger" type = "submit" href="javascript:history.go(-1)">Cancel</a>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多