Django中的login_required装饰器和urlresolver.reverse()
-
06-07-2019 - |
题
我有 @login_required
装饰器的几个视图。我将使用django.core.urlresolvers.reverse()函数重定向到它们。
我在urls.py中写道:
urlpatterns = ('myapp.views',
'^(?P<key>[-a-zA-Z0-9]+)/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装饰器函数找到反向匹配。如何避免这个问题?
, 'some_operation'),
)
并在views.py中:
<*>使 some_operation
视图函数具有 @login_required
装饰器。
Django显示以下错误:
<*>似乎Django正在尝试为login_required装饰器函数找到反向匹配。如何避免这个问题?
解决方案
我从 Django文档中找到了另一种方法。使用“named url”像这样:
urlpatterns = ('myapp.views',
url('^(?P<key>[-a-zA-Z0-9]+)/some-operation/
和
reverse('myapp-some-operation', kwargs={'key': item.key})
, 'some_operation', name='myapp-some-operation'),
)
和
<*>不隶属于 StackOverflow