2015-10-11 2 views
0

Я пытаюсь использовать django reverse для возврата к странице, которая принимает аргумент vendor_id.django reverse не работает с аргументами

Я пытаюсь сделать это таким образом, используя этот пост справки: POST

return HttpResponseRedirect(reverse('vendor_data', kwargs={'vendor_id':vendor_id})) 

Мой метод просмотра, который должен быть вызван:

def vendorData(request): 
    vendors = Vendors() 
    if request.method == 'GET': 
     vendor_id = request.GET.get('vendor_id') 
     if vendors.checkValidVendorId(vendor_id) == False: 
      return HttpResponse('<h2>404<br>Invalid Vendor Id.</h2>') 
     else: 
      vendor_details = vendors.getVendorData(vendor_id) 
      ..... 
      return render(request, 'vendor_data.html', context_dict) 

мой urls.py:

url(r'^vendor_data/', views.vendorData, name='vendor_data'), 

Если я не передаю какой-либо аргумент, он показывает метод HttpResponse из моего метода. Если я передать аргумент vendor_id так:

return HttpResponseRedirect(reverse('vendor_data', kwargs={'vendor_id':vendor_id})) 

Он выдает ошибку. След:

Traceback: 
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "C:\Users\Manish\Desktop\ScratcherAdmin\ScratcherAdmin\vendors\views.py" in editVendorData 
    162.  return HttpResponseRedirect(reverse('vendor_data', kwargs={'vendor_id':vendor_id})) 
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in reverse 
    579.  return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 
File "C:\Python27\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix 
    496.        (lookup_view_s, args, kwargs, len(patterns), patterns)) 

Exception Type: NoReverseMatch at /update_vendor_data/ 
Exception Value: Reverse for 'vendor_data' with arguments '()' and keyword arguments '{'vendor_id': u'20150001'}' not found. 1 pattern(s) tried: ['vendor_data/'] 

Как это решить?

+0

Это потому, что ваша точка зрения не принимает никаких аргументов тот же обратиться к вашему URL. – styvane

ответ

1

Что вы ожидаете от своего view - это параметр GET от query string. Что-то предполагаемое URL должно быть что-то подобное,

www.example.com/vendor/?vendor_id=12345 

И ниже,

return HttpResponseRedirect(reverse('vendor_data', kwargs={'vendor_id':vendor_id})) 

перенаправит вас на что-то подобное,

www.example.com/vendor/12345 

, для которых ваш view следует ожидать дополнительный параметр vendor_id ,

def vendorData(request, vendor_id): 

и, соответственно, остальная часть кода может измениться.

Решение вашей проблемы:

return HttpResponseRedirect("{}?vendor_id={}".format(reverse('vendor_data'), vendor_id)) 
+0

'url()' должен использовать захваченную группу. – styvane

Смежные вопросы