Django,NoReverseMatch。这段代码我应该怎么写?

问题描述 投票:0回答:1

我有一个问题。

NoReverseMatch at /update-orders/12
Reverse for 'update_order' with arguments '('',)' not found. 1 pattern(s) tried: ['update\\-orders/(?P<pk>[0-9]+)$']
Request Method: GET
Request URL:    http://192.168.0.249:8000/update-orders/12
Django Version: 3.0.5
Exception Type: NoReverseMatch
Exception Value:    
Reverse for 'update_order' with arguments '('',)' not found. 1 pattern(s) tried: ['update\\-orders/(?P<pk>[0-9]+)$']
Exception Location: /root/.local/share/virtualenvs/myp4-4l8n6HJk/lib/python3.7/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 677
Python Executable:  /root/.local/share/virtualenvs/myp4-4l8n6HJk/bin/python
Python Version: 3.7.3
Python Path:    
['/var/workspace/myp4/webprint',
 '/usr/lib/python37.zip',
 '/usr/lib/python3.7',
 '/usr/lib/python3.7/lib-dynload',
 '/root/.local/share/virtualenvs/myp4-4l8n6HJk/lib/python3.7/site-packages']

为什么我在模板渲染时出现这个错误?

detail_order.html

{% extends 'index.html' %}

{% block content %}
<p><a href="{% url 'orders' %}">Back</a></p>
<h1>Заказ {{get_order.number_order}}</h1>
<h2><a href="{% url 'update_order' get_order.id %}">Update</a></h2>

views.py

class UpdateOrderView(CustomSuccessMessageMixin, UpdateView):
    model = Order
    template_name = 'detail_order.html'
    form_class = OrderForm
    success_url = reverse_lazy('detail_order')
    success_msg = 'Ok'
    def get_context_data(self, **kwargs):
        kwargs['update'] = True
        return super().get_context_data(**kwargs)

urls.py

from django.contrib import admin
from django.urls import path, include
from .views import *
from print import views

urlpatterns = [
    path('', views.home_page, name='index'),
    path('orders', views.OrderCreateView.as_view(), name='orders'),
    path('update-orders/<int:pk>', views.UpdateOrderView.as_view(), name='update_order'), # THIS PATH
    path('delete-orders/<int:pk>', views.DeleteOrderView.as_view(), name='delete_order'),
    path('detail-order/<int:pk>', views.DetailOrderView.as_view(), name='detail_order'),
    path('login', views.MyprojectLoginView.as_view(), name='login_page'),
    path('register', views.RegisterUserView.as_view(), name='register_page'),
    path('logout', views.MyprojectLogout.as_view(), name='logout_page'),
]
python django django-urls
1个回答
0
投票

在你的模板上,请把 order.id 而不是 get_order.id. 那么你的模板代码将是 。

<h2><a href="{% url 'update_order' order.id %}">Update</a></h2>
© www.soinside.com 2019 - 2024. All rights reserved.