Django中的login_required装饰器和urlresolver.reverse()

时间:2009-06-23 06:46:43

标签: django django-views

我有@login_required装饰器的几个视图。我将使用django.core.urlresolvers.reverse()函数重定向到它们。

我在urls.py中写道:

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

并在views.py中:

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

使some_operation视图函数具有@login_required装饰器。

Django显示以下错误:

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

似乎Django正在尝试为login_required装饰器函数找到反向匹配。如何避免这个问题?

1 个答案:

答案 0 :(得分:4)

我从Django documentation找到了另一种方法。像这样使用“named url”:

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

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