我可以扩展基于功能的视图吗?

时间:2013-08-26 23:37:28

标签: django django-views

我有来自第三方应用的视图,其签名如下:

@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(r'^activate/(?P<activation_key>\w+)/$',
    userena_views.activate,
    success_url='/foo/', name='userena_activate',),

由于

1 个答案:

答案 0 :(得分:2)

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

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

特别针对您的问题,我认为,在您的网址定义中,您应该在字典中传递success_url

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

(只是一个猜测,通常是如何将额外的参数传递给视图函数。)