Python: Использование * args, ** kwargs в функциях оболочки

Я пишу функцию-оболочку для render_to_response () Django, чтобы добавить обработку CSRF.

логика такова:

def some_view (request)
    dictionary = {'context_param': some_param}
    dictionary.update(csrf(request))
    # ... view code here
    return render_to_response("a_template.html", dictionary)

render_to_response () имеет следующую сигнатуру:

def render_to_response(*args, **kwargs)

Я хочу написать прозрачную оболочку - просто добавьте некоторые функции (упомянутые ранее) и оставьте все как есть. Я думаю, мне следует написать что-то вроде этого:

def csrf_response (request, *args, **kwargs):

    # Here I need to somehow extract dictionary from args or kwargs

    if dictionary is None:
        dictionary = {}
    dictionary.update(csrf(request))

    # And here I somehow need to pass dictionary into render_to_response() fot the furher processing
    return render_to_response(*args, **kwargs)

Итак, вопрос - как лучше всего извлечь необходимый параметр из args / kwargs, (затем меняя его) и передавая дальше?

Кстати, код render_to_response () показался мне немного странным. Вот он:

def render_to_response(*args, **kwargs):
    """
    Returns a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    """
    httpresponse_kwargs = {'mimetype': kwargs.pop('mimetype', None)}
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

Что если кто-то вызовет его со всеми позиционными аргументами, поэтому kwargs будет пустым, а параметр mimetype будет указан в качестве последнего позиционного аргумента? Похоже, в этом случае его поведение было бы неправильным.

7
задан Alexander 9 May 2011 в 18:23
поделиться