1

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。我试过 reverse('registration.views.register', kwargs={'success_url':'/test/' }) 但这似乎不起作用。我已经尝试了好几个小时,但无法让我的想法正确。谢谢

4

2 回答 2

1

如果您希望能够使用参数指定reverse(),则必须在 URL 配置本身(正则表达式)中定义这些参数。就像是:

url(r'^register/(?P<success_url>[\w\/]+)/$',
    register,
    { 'backend': 'registration.backends.default.DefaultBackend' },
    name='registration_register'),

您可以将该 URL 部分包装在() 中吗?使其成为可选(这样它也只匹配简单的 register/)argskwargs之间的区别在于,使用 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 参数,如果您希望能够匹配任何完整的相对 URL,包括相对 URL 中可能的 GET 参数,实际的正则表达式可能会变得非常复杂。类似(未经测试):

r'^register/(?P<success_url>[\w\/]+(((\?)([a-zA-Z]*=\w*)){1}((&)([a-zA-Z]*=\w*))*)?)/$'
于 2010-06-07T13:30:34.857 回答
0

编辑:对不起,完全误解了这个问题——我没有看函数定义。实际上,这里的问题是您的 URLconf 的设计方式使得无法动态设置 success_url。它必须通过extra_context字典显式传递给函数 - 即您当前定义的那个backend。由于 URL 本身没有任何内容可以接受此参数,因此必须在那里对其进行硬编码。

于 2010-06-07T12:08:07.177 回答