from django.shortcuts import render_to_response from django.template import RequestContext from lib.http import JsonResponse def render_to(default_template, template_key_name=None): # а хуле ты не получаешь тут функцию как например в декораторе ajax_request? """ Decorator for Django views that sends returned dict to render_to_response function with given template and RequestContext as context instance. If view doesn't return dict then decorator simply returns output. Parameters: - default_template: template name to use - template_key_name: if given, render_to will seek for this key in output dict for template name (and will override default) """ def renderer(func): # каким раком тут появился func и откуда он знает что это наша функция если в функции сверху ты его не получил? def wrapper(request, *args, **kw): # теперь непонятно откуда здесь реквест.. они что передаются друг другу без того что я вызываю следующую функцию с параметрами которые надо передать? output = func(request, *args, **kw) if not isinstance(output, dict): return output tmpl = output.pop(template_key_name, default_template) return render_to_response(tmpl, output, context_instance=RequestContext(request)) return wrapper return renderer def ajax_request(func): """ Checks request.method is POST. Return error in JSON in other case. If view returned dict, returns JsonResponse with this dict as content. """ def wrapper(request, *args, **kwargs): if request.method == 'POST': response = func(request, *args, **kwargs) else: response = {'error': {'type': 403, 'message': 'Accepts only POST request'}} if isinstance(response, dict): return JsonResponse(response) else: return response return wrapper