我有来自第三方应用的视图,其签名如下:
@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',),
由于
答案 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',),
(只是一个猜测,通常是如何将额外的参数传递给视图函数。)