from django shortcuts import render_to_response from django template i

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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