如何解决Django 如何解决 NoReverseMatch 错误?
我正在使用 Django 制作网站。
我的网址有问题。
我尝试访问该网站,但发生错误。
在没有找到任何参数的情况下反转 '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 举报,一经查实,本站将立刻删除。