user2916464
user2916464

Reputation: 501

using HttpResponseRedirect

In one of my view function, under certain condition I want to redirect to another URL. So I am doing

return HttpResponseRedirect(reverse(next_view, kwargs={'name': name1}))

Now I have another view function like

def next_view(request, name):

I also put following line in relevant urls.py file

from wherever import next_view

urlpatterns = patterns("",
                        url(r"^next_view/(?P<name>w+)/", next_view, name="next_view"),
                       ) 

This does not work, I get

Reverse for 'next_view' with arguments '()' and keyword arguments '{'name': u'test'}' not found.

Upvotes: 0

Views: 248

Answers (2)

Aaron Lelevier
Aaron Lelevier

Reputation: 20760

For urls.py you want to add the backslash before the w+ and also add a $ sign at then end of the URL so that any other URL's joined onto this will be accepted:

urlpatterns = patterns("",
  url(r"^next_view/(?P<name>\w+)/$", next_view, name="next_view"),
  ) 

For views.py you want to add parenthesis around your view name:

def example_view(self):
  # view code 
  return HttpResponseRedirect(reverse('next_view', kwargs={'name': name1}))

Upvotes: 1

banderkat
banderkat

Reputation: 481

I'm guessing that the regex isn't matching properly. How about:

r"^next_view/(?P<name>\w+)/"

Note the backslash before the 'w'.

Upvotes: 1

Related Questions