2013-08-26 61 views
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',), 

感謝

回答

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',), 

(只是一個猜測,這通常是參數是如何傳遞額外的查看功能。)

+0

謝謝!不知道你可以包裝並返回這樣的功能。然而,我甚至不需要那麼遠 - 我只想添加extra_context或success_url,但視圖是說它收到一個意外的參數。 – Joker

+0

我認爲'success_url'應該是一本字典。更新了答案。 – mipadi

+0

是的,這是問題所在。謝謝 – Joker

相關問題