views:

317

answers:

1

I have several views with @login_required decorator. And I'm going to use django.core.urlresolvers.reverse() function for redirection to them.

I wrote in urls.py:

urlpatterns = ('myapp.views',
    '^(?P<key>[-a-zA-Z0-9]+)/some-operation/$', 'some_operation'),
)

and in views.py:

return HttpResponseRedirect(
     reverse('myapp.views.some_operation', kwargs={'key': item.key})
)

such that some_operation view function has @login_required decorator.

Django shows the following error:

Reverse for '<django.contrib.auth.decorators._CheckLogin object at 0x866782c>' with arguments '()' and keyword arguments '{'key': u'ab9d7x'}' not found.

It seems that Django is trying to find reverse match for login_required decorator function. How do I get avoided from this problem?

+4  A: 

I've found another way to do this from Django documentation. Use "named url" like this:

urlpatterns = ('myapp.views',
    url('^(?P<key>[-a-zA-Z0-9]+)/some-operation/$', 'some_operation', name='myapp-some-operation'),
)

and

reverse('myapp-some-operation', kwargs={'key': item.key})
Achimnol