比如说,在我的注册类的 post 方法中,如果用户已经注册,我想将用户重定向到登录页面,很简单。
class Register(View):
...
def post(self, request):
# Some code to check if the email address is already in the db
message = {'message': 'You are already a member and registered the project. Please just log-in',
'registration_date': the_registered_date}# The form with the filled-in data is returned
return HttpResponseRedirect(reverse('accounts:login', kwargs = message))
在我的 urls.py 中:
#urls.py
...
url(r'^login/{0,1}$', Login.as_view(), name='login', kwargs={'message': None, 'date': None}),
这给了我错误消息:
Reverse for 'login' with arguments '()' and keyword arguments '{'message': 'You are already a member and registered the project. Please just log-in', 'registration_date': datetime.datetime(2015, 10, 15, 14, 3, 39, 864000, tzinfo=<UTC>)}' not found. 2 pattern(s) tried: [u'accounts/$', u'accounts/login/{0,1}$']
我做错了什么?
最佳答案
你的url定义是错误的,听起来你也误解了什么kwargs
位于reverse
。它为 url 定义的命名参数提供其值,而不是将上下文传递给 View 。
例如,您可以这样做:
url(r'test_suite/(?P<test_name>\w+)/(?P<test_id>\d+)$', 'test', name='test')
reverse('test', kwargs={'test_name': 'haha', 'test_id': 1})
kwargs
将替换您的test_name
在 url 定义中使用 haha
和test_id
与 1
。这将产生一个网址:test_suite/haha/1
.
关于Django 使用 kwargs 进行反向操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33173943/