urlconf和视图如下:
url(r'^register/$',
register,
{ 'backend': 'registration.backends.default.DefaultBackend' },
name='registration_register'),
def register(request, backend, success_url=None, form_class=None,
disallowed_url='registration_disallowed',
template_name='registration/registration_form.html',
extra_context=None):
我想要做的是将用户重定向到注册页面并指定success_url。我尝试了反向('registration.views.register',kwargs = {'success_url':'/ test /'}),但这似乎不起作用。我一直在努力工作几个小时,无法理解我的想法。谢谢
答案 0 :(得分:1)
如果您希望能够使用参数指定 reverse(),则必须在URL配置本身(regexp)中定义这些参数。类似的东西:
url(r'^register/(?P<success_url>[\w\/]+)/$',
register,
{ 'backend': 'registration.backends.default.DefaultBackend' },
name='registration_register'),
您可以将该网址部分包装在()?中以使其可选(因此它只匹配简单的寄存器/) args 和 kwargs 之间的区别在于,使用args,您可以指定未命名/命名的URL参数,而 kwargs 仅指定。 所以:
r'^register/(?P<success_url>\w+)/$'
reverse('url_name', args=[my_success_url])
reverse('url_name', kwargs={'success_url': my_success_url}) // both work and do the same
r'^register/(\w+)/$'
reverse('url_name', args=[my_success_url]) // only this works
修改强>: 对于success_url params,如果您希望能够匹配任何完整的相对URL,包括相对URL中可能的GET参数,则实际的正则表达式可能会非常复杂。 像(未经测试)的东西:
r'^register/(?P<success_url>[\w\/]+(((\?)([a-zA-Z]*=\w*)){1}((&)([a-zA-Z]*=\w*))*)?)/$'
答案 1 :(得分:0)
编辑:抱歉,完全误读了这个问题 - 我没有看到函数定义。实际上,这里的问题是你的URLconf的设计方式使得无法动态设置success_url。它必须通过extra_context
字典显式传递给函数 - 即您当前定义的字典backend
。由于URL本身没有任何内容可以接受此参数,因此必须对其进行硬编码。