Получение пойманной ошибки NoReverseMatch в django - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть представление с именем 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))

И в моем шаблоне заказа на редактирование есть URL-адрес тега шаблона.

<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))

И в моем шаблоне я изменил 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. Но я хочу иметь возможность использовать этот параметр. Есть ли способ, которым я могу преодолеть эту проблему? Я надеюсь, что все это имело смысл.

1 Ответ

1 голос
/ 21 февраля 2011

Ну, как вы передаете параметр 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.

...