在django中获取NoReverseMatch错误

时间:2011-02-21 13:09:59

标签: python html django url views

我有一个名为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参数。但由于某种原因不起作用。我已将此视图称为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))

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

<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参数。但我希望能够使用此参数。有没有办法可以克服这个问题?我希望这一切都有道理。

1 个答案:

答案 0 :(得分:1)

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

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

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