1

我有一个第三方应用程序的视图,其签名如下所示:

@secure_required
def activate(request, activation_key,
             template_name='userena/activate_fail.html',
             retry_template_name='userena/activate_retry.html',
             success_url=None, extra_context=None):

如何以干净的方式扩展此功能?我实际上只需要提供一些可选参数,但是我可以在不将整个函数复制到我的代码中以覆盖它的情况下做到这一点吗?当我升级这个第三方应用程序的版本时,这似乎在未来不安全,因为他们的代码可能会改变。

编辑:

如果我尝试覆盖 URL 以包含一个额外的参数,它会说视图收到了一个意外的参数。

这是我正在做的 URL 覆盖:

url(r'^activate/(?P<activation_key>\w+)/$',
    userena_views.activate,
    success_url='/foo/', name='userena_activate',),

谢谢

4

1 回答 1

2

您可以使用可变长度参数:

def my_activate(request, *args, **kwargs):
    res = activate(request, *args, **kwargs)
    # Do stuff you need to do
    return res

具体到您的问题,我认为,在您的 URL 定义中,您应该传入success_url字典:

url(r'^activate/(?P<activation_key>\w+)/$',
    userena_views.activate,
    {'success_url': '/foo/'}, name='userena_activate',),

(只是猜测,这通常是附加参数传递给视图函数的方式。)

于 2013-08-27T00:18:02.803 回答