NoReverse比赛在

时间:2019-07-26 14:22:16

标签: python django

无法找出为什么我的Web应用程序不断抛出此错误。我很笨

NoReverseMatch at /new-orders/order-list/
Reverse for 'order-sent' with arguments '('',)' not found. 1 pattern(s) 
tried: ['new\\-orders/order\\-list/(?P<order_id>[0-9]+)/sent/$']
Request Method: GET
Request URL:    http://localhost:8000/new-orders/order-list/
Django Version: 2.2.3
Exception Type: NoReverseMatch
Exception Value: Reverse for 'order-sent' with arguments '('',)' notfound. 1 pattern(s) tried: ['new\\-orders/order\\-list/(?P<order_id>[0-9]+)/sent/$']
Reverse for 'order-sent' with arguments '('',)' not found. 1 pattern(s) tried: ['new\\-orders/order\\-list/(?P<order_id>[0-9]+)/sent/$']

这是我的views.py,我想将booleanField order_sent更改为True。

def sent(request, order_id):
    order = get_object_or_404(Order, pk=order_id)
    try:
       selected_order = order.objects.get(pk=request.POST['order'])
    except (KeyError, Order.DoesNotExist):
       return render(request, 'new_orders/order-list.html', {
           'order': order,
           'error_message': "You did not select a valid Order",})
    else:
        selected_order.order_sent = True
        selected_order.save()
    return render(request, 'new_orders/order-list.html', {'order': order})

这是我的模型。py:

class Order(models.Model):
    order_user = models.ForeignKey(MyUser, on_delete=models.CASCADE, related_name='myuser')
    order_number = models.CharField(max_length=11, unique=True)
    order_sent = models.BooleanField(default=False)

这是urls.py

app_name = 'new_orders'

urlpatterns = [
    path("order-list/", views.index, name='order-list'),
    path("order-list/<int:order_id>/", views.detail, name='order-detail'),
    path("order-list/<int:order_id>/sent/", views.sent, name='order-sent'),
]

和我的order-list.html:

<form action="{% url 'new_orders:order-sent' order.id %}" method="post">
{% csrf_token %}
   <ul>
       {% for order in all_orders %}
        <li><a href="{{ order.id }}"> User: <b>{{ order.order_user }}</b> | Order Type : <b>{{ order.order_type }}</b> | Device: <b>{{ order.order_device }}</b> | Count: <b>{{ order.order_count }}</b> | Order Number: <b>{{ order.order_number }}</b> | Date: <b>{{ order.order_date }}</b> | <b>{{ order.order_buffer }}</b> | Note: <b>{{ order.order_note }}</b> | Order Sent: <b>{{ order.order_sent }}</b> </a>
        <input type="checkbox" id="order{{ forloop.counter }}" name="order" value="{{ order.id }}">
        <label for="order{{ forloop.counter }}">
            {% if order.order_sent %}
                <img src="https://imgur.com/a/zXKjvAj"/>
            {% endif %}
        </label>
        </li>
        {% endfor %}
    </ul>
</form>
<input type="submit" value="Submit">

我想通过html中的表单将order_sent从False状态更改为True。有什么想法怎么了?我正在尝试通过此video实现类似的功能。

1 个答案:

答案 0 :(得分:0)

您的上下文中没有order

<form action="{% url 'new_orders:order-sent' order.id %}" method="post">

您只能在此order块中引用for in-

{% for order in all_orders %} 
    ... 
{% endfor %}

就像您在这里所做的-

   {% if order.order_sent %}
       <img src="https://imgur.com/a/zXKjvAj"/>
   {% endif %}

如果在django模板中尝试使用对象时上下文中不存在该对象,则会得到一个空字符串

例如

   {{ some_not_existing_value }}

不会显示任何内容,但也不会破坏任何内容