【问题标题】:Getting a Caught NoReverseMatch error in django在 django 中遇到 Caught NoReverseMatch 错误
【发布时间】:2011-07-01 06:45:27
【问题描述】:

我有一个名为 edit_order 的视图,还有另一个名为 client_items 的视图。

def edit_order(request, order_no)
    change_item = order.contact.client

def client_items(request, client_id = 0):
    client = None
    items = None
    try:
        client = models.Client.objects.get(pk = client_id)
        items = client.storageitem_set.all()
    except:
        return HttpResponse(reverse(return_clients))
    return render_to_response('items.html', {'items':items, 'client':client}, context_instance = RequestContext(request))

在我的编辑订单模板中,我有一个模板标签网址。

<input type="button"  value="Edit items" onclick="window.location.href='{% url tiptop.views.client_items change_item.pk  %}'" />

这行得通。现在,我想制作另一个视图,它做同样的事情但可以使用 order_no 参数。但由于某种原因 this 不起作用。我将此视图称为 test_items。

def test_items(request, client_id = 0, order_no=0):
    client = None
    items = None
    try:
        client = models.Client.objects.get(pk = client_id)
        items = client.storageitem_set.all()
        order = models.Order.objects.get(pk = order_no)
    except:
        return HttpResponse(reverse(return_clients))
    return render_to_response('test.html', {'items':items, 'client':client, 'order':order}, context_instance = RequestContext(request))

在我的模板中,我已将 url 更改为此。

<input type="button"  value="Edit items" onclick="window.location.href='{% url tiptop.views.test_items change_item.pk  %}'" />

所以我得到了这个错误。

Caught NoReverseMatch while rendering: Reverse for 'tiptop.views.test_items' with arguments '(17L,)' and keyword arguments '{}' not found.

造成这种情况的原因是 order_no 参数。但我希望能够使用这个参数。有没有办法可以克服这个问题?我希望这一切都有意义。

【问题讨论】:

    标签: python html django url views


    【解决方案1】:

    那么,你是如何传递 order_no 参数的?你的 urls.py 是什么样的?在您修改后的模板中,您没有将 order_no 传递给 {% url %} 标记。如果您的 URL 正则表达式需要两个参数(client_id 和 order_no),那么它将找不到匹配的 URL。你可以在 urls.py 中尝试这样的事情:

    urlpatterns = patterns('tiptop.views',
        (r'^(\d+)/(\d*)$', 'test_items'),
    )
    

    但在您的情况下,将 order_no 作为 GET 参数传递可能会更好。

    【讨论】:

    • 抱歉回复晚了(我的网络中断了)。我有(r'^search/(?P&lt;client_id&gt;\d+)/(?P&lt;order_no&gt;\d+)/test_items/$', views.test_items),我没有发现问题。
    • 在您的正则表达式中,您需要两个参数(\d+ 表示您匹配一个或多个数字)。在您的模板代码中,您只提供了一个参数,这就是您获得 NoReverseMatch 异常的原因。修改您的代码以执行类似 {% url tiptop.views.test_items change_item.pk order.pk %} 的操作,它会起作用。
    • 是的,它已经成功了,而且 - ... 似乎出现了一个新错误。打开编辑订单表格并单击{% url tiptop.views.test_items change_item.pk order.pk %} 的链接后,我收到Caught TypeError while rendering: 'Order' object is not iterable 错误。
    • 编辑:解决了!改变了订单的定义。无论如何,谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2015-10-24
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多