微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 如何解决 NoReverseMatch 错误?

如何解决Django 如何解决 NoReverseMatch 错误?

我正在使用 Django 制作网站。

我的网址有问题。

我尝试访问该网站,但发生错误

错误noreverseMatch。

在没有找到任何参数的情况下反转 'add'。尝试了 1 个模式:['purchase/order/(?P[^/]+)/$']

我该如何解决这个问题?

# urls.py
{% for value in object_list %}

    <tr>
      <form action="{% url 'purchase_order:add' value.CAT_ID %}" method="get">
         <td scope="row">{{ value.CAT_ID }}</td>
         <td scope="row">{{ value.INFOR }}</td>
         <td scope="row">
            <input type="submit" value="CREATE" class="btn btn-outline-secondary btn-sm">
         </td>
       </form>
    </tr>

{% endfor %}
# urls.py

app_name = 'purchase_order'

urlpatterns = [

    # CREATE URL
    path('order/<str:CAT_ID>/',views.Order_add_View.as_view(),name='add'),]
# views.py

class Order_add_View(LoginrequiredMixin,CreateView):
    model = Purchase_Request
    # template_name = 'purchase_order/add.html'
    fields = ['CAT_ID',INFOR]

    def get(self,request,*args,**kwargs):

        CAT_ID = self.kwargs['CAT_ID']

        return render(request,'purchase_order/add.html',{'CAT_ID':CAT_ID})

    def form_valid(self,form):
        form.instance.owner = self.request.user
        return super().form_valid(form)

解决方法

您需要将输入的 CAT_ID 作为关键字 arg 添加到模板标签中:

{% for value in object_list %}

    <tr>
      <form action="{% url 'purchase_order:add' CAT_ID=value.CAT_ID %}" method="get">
         <td scope="row">{{ value.CAT_ID }}</td>
         <td scope="row">{{ value.INFOR }}</td>
         <td scope="row">
            <input type="submit" value="CREATE" class="btn btn-outline-secondary btn-sm">
         </td>
       </form>
    </tr>

{% endfor %}
,

如果我们查看 django 试图解析但无法解析的表单操作 url

{% url 'purchase_order:add' value.CAT_ID %}

错误说 Reverse for 'add' with no arguments not found.. 但你已经给了它一个参数! value.CAT_ID 那是什么?

这意味着模板上下文中的 value.CAT_ID 中不存在任何值。该网址也可以阅读

{% url 'purchase_order:add' %}

因为这就是 django 在运行时看到的。

您已经用

遍历了您的object_list
{% for value in object_list %}

因此,object_list 不是视图上下文,而只是一个序列化的 Purchase_Request 对象列表,您的基于类的视图已为您添加到模板上下文中(如果设置正确)。您的 Purchase_Request 模型没有 CAT_ID 字段,因此 value.CAT_ID 不返回任何内容。

您确实将 CAT_ID 添加到模板的上下文中

return render(request,'purchase_order/add.html',{'CAT_ID':CAT_ID})

它只是模板上下文中的 CAT_ID

{% for value in object_list %}

    <tr>
      <form action="{% url 'purchase_order:add' CAT_ID %}" method="get">
         <td scope="row">{{ CAT_ID }}</td>
         <td scope="row">{{ value.INFOR }}</td>
         <td scope="row">
            <input type="submit" value="CREATE" class="btn btn-outline-secondary btn-sm">
         </td>
       </form>
    </tr>

{% endfor %}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。