Django删除网址和视图给出NoReverseMatch

时间:2017-12-01 09:46:18

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

我遇到了网址和视图的问题以及与已删除网页的无反向匹配问题。我的项目是一个小型CRM。起初我只有一个客户列表。所以我的页面有层次结构:

客户列表(home.html) -顾客信息 - 编辑一位客户

现在,我想扩大系统,这意味着每个客户都有子公司:

客户列表(home.html) - 客户子公司名单 - 详细介绍一家客户子公司 - 修改一个客户子公司

我的问题是:我已经在第一个简单的步骤插入了一个辅助页面并将其从家里链接起来。但是现在我在编辑页面上的主页html上出现了反向匹配错误?不明白为什么。我甚至删除了所有要编辑的链接。

我没有其他地方使用编辑页面。为什么我会收到反向匹配错误? Django保存者关系?你有什么提示吗?

错误

Exception Type: NoReverseMatch
Exception Value: Reverse for 'edit_customer' not found. 'edit_customer' is not a valid view function or pattern name.

urls.py

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'^customerSubs/(?P<pk>\d+)/$', views.customer_subs, name='customer_subs'),
    url(r'^customerDetails/(?P<pk>\d+)/$', views.customer_details, name='customer_details'),
#   url(r'^customerDetails/(?P<pk>\d+)/edit/$', views.edit_customer, name='edit_customer'),

views.py

def home(request):
    customers = Customer.objects.all()
    return render(request, 'home.html', {'customers': customers})

def customer_subs(request, pk):
    customerSubs = get_object_or_404(Customer, pk=pk)
    return render(request, 'customerSubs.html', {'customerSubs':  customerSubs})    


def customer_details(request, pk):
    customerDetails = get_object_or_404(Customer, pk=pk)
    return render(request, 'customerDetails.html', {'customerDetails':  customerDetails})    

#def edit_customer(request, pk):
#   customerDataSet = get_object_or_404(Customer, pk=pk)
# .....

Home.html中

<tbody>
      {% for customer in customers %}
        <tr>
          <td>
        <a href="{% url 'customer_subs' customer.pk %}">{{ customer.customerName }}</a>
         <small class="text-muted d-block">MID: {{ customer.MId }}</small>
        </td>
        </tr>
      {% endfor %}
</tbody>

正如

部分所述

customerSubs.html

<table class="table">
    <tbody>
        <tr>
<!--        <td class="align-middle"><a href="{% url 'edit_customer' customerDetails.pk %}">{{ customerDetails.customerName }}</a>-->
        </tr>
    </tbody>
</table>

1 个答案:

答案 0 :(得分:0)

customerSubs.html模板中,您使用HTML注释语法注释了对Django网址解析器的调用 - 这意味着就Django而言,在渲染模板时{{1}调用已删除的URL并继续解析视图。如果你使用Django的模板注释语法{% url %}注释掉它,Django会在渲染时跳过它并且不会抛出错误。