Python Django:如何为以下内容编写反向函数
urlconf和视图如下所示:Python Django:如何为以下内容编写反向函数,python,django,reverse,url,keyword-argument,Python,Django,Reverse,Url,Keyword Argument,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='
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):
我要做的是将用户重定向到注册页面并指定一个成功url。我尝试了反向('registration.views.register',kwargs={'success_url':'/test/'}),但似乎不起作用。我已经试了好几个小时了,但还是想不出该怎么做。谢谢编辑:对不起,我完全误解了这个问题-我没有看函数定义。实际上,这里的问题是,您的URLconf的设计方式使得不可能动态设置success\uURL。它必须通过
extra\u上下文
字典显式传递给函数,即您当前定义了后端
的字典。由于URL本身没有接受此参数的内容,因此必须在此处对其进行硬编码。编辑::对不起,完全误解了问题-我没有查看函数定义。实际上,这里的问题是,您的URLconf的设计方式使得不可能动态设置success\uURL。它必须通过extra\u上下文
字典显式传递给函数,即您当前定义了后端
的字典。由于URL本身中没有可接受此参数的内容,因此必须在此处对其进行硬编码。如果希望能够使用参数指定reverse(),则必须在URL配置本身(regexp)中定义这些参数。比如:
url(r'^register/(?P<success_url>[\w\/]+)/$',
register,
{ 'backend': 'registration.backends.default.DefaultBackend' },
name='registration_register'),
url(r'^register/(?P[\w\/]+)/$),
登记
{'backend':'registration.backends.default.DefaultBackend'},
name='registration\u register'),
您可以在()中包装该URL部分?使其成为可选的(以便它只匹配简单寄存器/也)
args和kwargs之间的区别在于,使用args可以指定未命名/命名的URL参数,而使用kwargs只能指定命名的URL参数。
因此:
r'^register/(?P\w+/$)
反向('url\u name',args=[my\u success\u url])
反向('url\u name',kwargs={'success\u url':my\u success\u url})//两者都起作用,作用相同
r“^register/(\w+)/$”
反向('url\u name',args=[my\u success\u url])//仅此有效
编辑:
对于成功的url参数,如果您希望能够匹配任何完整的相对url,包括相对url中可能的GET参数,那么实际的regexp可能会变得相当复杂。
类似于(未经测试):
r'^register/(?P[\w\/]+((?)([a-zA-Z]*=\w*){1}(&)([a-zA-Z]*=\w*)*)/$)
如果希望能够使用参数指定reverse(),则必须在URL配置本身(regexp)中定义这些参数。比如:
url(r'^register/(?P<success_url>[\w\/]+)/$',
register,
{ 'backend': 'registration.backends.default.DefaultBackend' },
name='registration_register'),
url(r'^register/(?P[\w\/]+)/$),
登记
{'backend':'registration.backends.default.DefaultBackend'},
name='registration\u register'),
您可以在()中包装该URL部分?使其成为可选的(以便它只匹配简单寄存器/也)
args和kwargs之间的区别在于,使用args可以指定未命名/命名的URL参数,而使用kwargs只能指定命名的URL参数。
因此:
r'^register/(?P\w+/$)
反向('url\u name',args=[my\u success\u url])
反向('url\u name',kwargs={'success\u url':my\u success\u url})//两者都起作用,作用相同
r“^register/(\w+)/$”
反向('url\u name',args=[my\u success\u url])//仅此有效
编辑:
对于成功的url参数,如果您希望能够匹配任何完整的相对url,包括相对url中可能的GET参数,那么实际的regexp可能会变得相当复杂。
类似于(未经测试):
r'^register/(?P[\w\/]+((?)([a-zA-Z]*=\w*){1}(&)([a-zA-Z]*=\w*)*)/$)
那么“success\u url”、“form\u class”、“disallowed\u url”等都是GET参数吗?所以一般来说,视图函数中设置的所有KWARG都是GET参数?没有问题,所以你的意思是我不能调用reverse?但是直接调用函数吗?你能给我举个例子吗。感谢它们不是GET参数,它们只是发送到Python视图函数的额外参数。从URL配置中定义的参数(更确切地说是“捕获的”)也可以是GET参数,但不一定是GET参数。仅当您选择以下格式定义URL时:^register?my_get_param=(?P\w+)那么“success_URL”、“form_class”、“disallowed_URL”等都是get参数吗?所以一般来说,视图函数中设置的所有KWARG都是GET参数?没有问题,所以你的意思是我不能调用reverse?但是直接调用函数吗?你能给我举个例子吗。感谢它们不是GET参数,它们只是发送到Python视图函数的额外参数。从URL配置中定义的参数(更确切地说是“捕获的”)也可以是GET参数,但不一定是GET参数。仅当您选择以以下格式定义URL时:^register?my_get_param=(?P\w+)非常感谢!这个问题的全部原因是因为我想在用户注册后将他们重定向到他们来自的地方。我想我也可以使用会话参数。我发现有时存储会话数据是一种简单的方法。您是否建议在这种情况下这样做?再次感谢!谢谢!这个问题的全部原因是因为我想在用户注册后将他们重定向到他们来自的地方。我想我也可以使用会话参数。我发现有时存储会话数据是一种简单的方法。您是否建议在这种情况下这样做?再次感谢!
r'^register/(?P<success_url>[\w\/]+(((\?)([a-zA-Z]*=\w*)){1}((&)([a-zA-Z]*=\w*))*)?)/$'