2013-01-10 3 views
0

처음으로 이러한 오류가 발생하고 주변을 둘러 보았지만 동일한 상황에서 오류가 발생하지 않았습니다. 사용자가 양식을 제출하면 리디렉션이 발생합니다.NoReverseMatch 오류는 어떻게 처리합니까?

제 생각에는 reverse() 함수를 사용하여 url을 반환하고 리디렉션합니다. 여기 이다의 의견이다 : 여기

def get_category(request): 
    categories = Category.objects.all().prefetch_related('item') 
    form = ItemAddToCartForm(request=request, label_suffix=':') 
    # need to evaluate the HTTP method 
    if request.method == 'POST': 
     # add to order..create the bound form 
     postdata = request.POST.copy() 
     form = ItemAddToCartForm(request,postdata) 
     # check validation of posted data 
     if form.is_valid(): 
      # add to order and redirect to order page 
      order.add_to_order(request) 
      # if test cookie worked, get rid of it 
      if request.session.test_cookie_worked(): 
       request.session.delete_test_cookie() 
      url =urlresolvers.reverse('show_order') 
      # redirect to order page 
      return HttpResponseRedirect(url) 
    else: 
     # it's a GET, create the unbound from. Note request as a Kwarg 
     form = ItemAddToCartForm(request=request,label_suffix=':') 
    # assign the hidden input the item slug 
    # set the test cookie on our first GET request 
    request.session.set_test_cookie() 
    context={ 
     'categories':categories, 
     'form':form, 
#  'menu':menu, 

    } 
    return render_to_response('category.html',context,context_instance=RequestContext(request)) 

그것을 지시하는 URL의 도면에 :

from django.conf.urls.defaults import * 

urlpatterns = patterns(
    'live.views', 
    url(r'^$', view="show_order",name="order_index"), 
) 

: 상기 뷰

def show_order(request): 
    if request.method == 'POST': 
     if postdata['submit'] == 'Remove': 
      order.remove_from_order(request) 
     if postdata['submit'] == 'Update': 
      order.update_order(request) 
    order_items = order.get_order_items(request) 
    page_title = 'F4L order' 
    order_subtotal = order.order_subtotal(request) 
    return render_to_response('public/order.html',context_instance=RequestContext(request)) 

URL을 두보기의 URL :

<form method="post" action="."> 
    <a href="{% url order_index %}"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <br /> 
    <input type="submit" value="Add To Order" name="submit"> 
    </a> 

Traceback: 
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/mats-invasion/projects/f4l/f4l/live/views.py" in get_category 
    39.   url =urlresolvers.reverse('show_order') 
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse 
    476.  return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) 
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix 
    396.     "arguments '%s' not found." % (lookup_view_s, args, kwargs)) 

Exception Type: NoReverseMatch at /menu/ 
Exception Value: Reverse for 'show_order' with arguments '()' and keyword arguments '{}' not found. 

감사합니다 : 여기
url(r'^orders/', include('live.urls')), 
url(r'^menu/$','live.views.get_category'), 

(210)의 형식은 HTML입니다.

답변

1

역방향으로 전달 된 값은보기가 아닌 URL의 이름이어야합니다.

url =urlresolvers.reverse('order_index') 
+0

감사합니다 charl하지만 다른 문제가 html로 나타납니다. 버튼을 누른 것처럼 (양식을 작성해야 함) 페이지를 리디렉션합니다. 이걸 보았 니? –

+0

유형이 submit (type = "submit")으로 설정된 양식의 버튼은 양식을 제출합니다. 내가 이것을 정확하게 이해하지 못했는지. – Charl

+0

걱정하지 말아라, jus가 고쳐 졌어, 그건 내 html. 리디렉션 URL'}을 잘못된 위치에 넣었습니다. –