def renderer(prefix=None, default_extends_layout=True,
template_ext='html', content_type=settings.DEFAULT_CONTENT_TYPE):
def render(func=None, extends_layout=default_extends_layout,
login=True, logout=False, perm=None):
def do_wrapper(func):
@wraps(func)
def wrapper(request, *args, **kwargs):
response = HttpResponse(content_type=content_type)
content = ''
if logout:
if get_request_user(request):
return logout_redirect(request)
elif login:
if not get_request_user(request):
return login_redirect(request)
try:
if perm:
has_perm(request, perm)
result = func(request, response, *args, **kwargs)
except HttpReload as e:
return e.response(request, response)
except (Alert, ObjectDoesNotExist) as e:
result = {}
if isinstance(e, Alert):
result = {'message': e.message, 'tag': e.tag, 'buttons': e.buttons}
if e.back and 'HTTP_REFERER' in request.META:
result['buttons'][u'??'] = request.META['HTTP_REFERER']
elif isinstance(e, ObjectDoesNotExist):
result = {'message': u'??????????????????\n%s' % e, 'tag':'error'}
content = render_to_string(request, result, '/admin/alert', prefix, template_ext)
else:
if isinstance(result, HttpResponse):
return result
content = render_to_string(request, result, func.__name__.rstrip('_'), prefix, template_ext)
if not extends_layout:
response.content = content
return response
from .loader import get_navigation
user = get_request_user(request)
base_dictionary = {'content': content,
'navigation': user and get_navigation(request),
'user': user}
response.content = render_to_string(request, base_dictionary, 'admin/layout')
return response
return wrapper
# @render() ???
if func is None:
return do_wrapper
# @render ????
return do_wrapper(func)
return render
评论列表
文章目录