2013-08-26 2 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): 

Как продлить эту функцию в чистом образом? Мне просто нужно предоставить некоторые необязательные параметры, но могу ли я сделать это без копирования всей функции в мой код, чтобы переопределить ее? Кажется, что в будущем это будет небезопасно, когда я обновляю версии этого стороннего приложения, так как их код может измениться.

Edit:

Если я пытаюсь просто переопределить 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

Смежные вопросы