mirror of
https://github.com/django/django.git
synced 2025-06-03 10:39:12 +00:00
Simplified implementation of django.shortcuts.render(_to_response).
*args, **kwargs brought more confusion than concision.
This commit is contained in:
parent
92e8f1f302
commit
a0141f9eac
@ -6,6 +6,9 @@ for convenience's sake.
|
|||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
from django.template import loader, RequestContext
|
from django.template import loader, RequestContext
|
||||||
|
from django.template.context import _current_app_undefined
|
||||||
|
from django.template.engine import (
|
||||||
|
_context_instance_undefined, _dictionary_undefined, _dirs_undefined)
|
||||||
from django.http import HttpResponse, Http404
|
from django.http import HttpResponse, Http404
|
||||||
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
|
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
|
||||||
from django.db.models.base import ModelBase
|
from django.db.models.base import ModelBase
|
||||||
@ -16,49 +19,43 @@ from django.utils import six
|
|||||||
from django.utils.deprecation import RemovedInDjango20Warning
|
from django.utils.deprecation import RemovedInDjango20Warning
|
||||||
|
|
||||||
|
|
||||||
def render_to_response(*args, **kwargs):
|
def render_to_response(template_name, dictionary=_dictionary_undefined,
|
||||||
|
context_instance=_context_instance_undefined,
|
||||||
|
content_type=None, dirs=_dirs_undefined):
|
||||||
"""
|
"""
|
||||||
Returns a HttpResponse whose content is filled with the result of calling
|
Returns a HttpResponse whose content is filled with the result of calling
|
||||||
django.template.loader.render_to_string() with the passed arguments.
|
django.template.loader.render_to_string() with the passed arguments.
|
||||||
"""
|
"""
|
||||||
httpresponse_kwargs = {'content_type': kwargs.pop('content_type', None)}
|
|
||||||
|
|
||||||
# TODO: refactor to avoid the deprecated code path.
|
# TODO: refactor to avoid the deprecated code path.
|
||||||
with warnings.catch_warnings():
|
with warnings.catch_warnings():
|
||||||
warnings.filterwarnings("ignore", category=RemovedInDjango20Warning)
|
warnings.filterwarnings("ignore", category=RemovedInDjango20Warning)
|
||||||
content = loader.render_to_string(*args, **kwargs)
|
content = loader.render_to_string(template_name, dictionary, context_instance, dirs)
|
||||||
|
|
||||||
return HttpResponse(content, **httpresponse_kwargs)
|
return HttpResponse(content, content_type)
|
||||||
|
|
||||||
|
|
||||||
def render(request, *args, **kwargs):
|
def render(request, template_name, dictionary=_dictionary_undefined,
|
||||||
|
context_instance=_context_instance_undefined,
|
||||||
|
content_type=None, status=None, current_app=_current_app_undefined,
|
||||||
|
dirs=_dirs_undefined):
|
||||||
"""
|
"""
|
||||||
Returns a HttpResponse whose content is filled with the result of calling
|
Returns a HttpResponse whose content is filled with the result of calling
|
||||||
django.template.loader.render_to_string() with the passed arguments.
|
django.template.loader.render_to_string() with the passed arguments.
|
||||||
Uses a RequestContext by default.
|
Uses a RequestContext by default.
|
||||||
"""
|
"""
|
||||||
httpresponse_kwargs = {
|
if context_instance is not _context_instance_undefined:
|
||||||
'content_type': kwargs.pop('content_type', None),
|
if current_app is not _current_app_undefined:
|
||||||
'status': kwargs.pop('status', None),
|
|
||||||
}
|
|
||||||
|
|
||||||
if 'context_instance' in kwargs:
|
|
||||||
context_instance = kwargs.pop('context_instance')
|
|
||||||
if kwargs.get('current_app', None):
|
|
||||||
raise ValueError('If you provide a context_instance you must '
|
raise ValueError('If you provide a context_instance you must '
|
||||||
'set its current_app before calling render()')
|
'set its current_app before calling render()')
|
||||||
else:
|
else:
|
||||||
current_app = kwargs.pop('current_app', None)
|
|
||||||
context_instance = RequestContext(request, current_app=current_app)
|
context_instance = RequestContext(request, current_app=current_app)
|
||||||
|
|
||||||
kwargs['context_instance'] = context_instance
|
|
||||||
|
|
||||||
# TODO: refactor to avoid the deprecated code path.
|
# TODO: refactor to avoid the deprecated code path.
|
||||||
with warnings.catch_warnings():
|
with warnings.catch_warnings():
|
||||||
warnings.filterwarnings("ignore", category=RemovedInDjango20Warning)
|
warnings.filterwarnings("ignore", category=RemovedInDjango20Warning)
|
||||||
content = loader.render_to_string(*args, **kwargs)
|
content = loader.render_to_string(template_name, dictionary, context_instance, dirs)
|
||||||
|
|
||||||
return HttpResponse(content, **httpresponse_kwargs)
|
return HttpResponse(content, content_type, status)
|
||||||
|
|
||||||
|
|
||||||
def redirect(to, *args, **kwargs):
|
def redirect(to, *args, **kwargs):
|
||||||
|
@ -4,6 +4,8 @@ from copy import copy
|
|||||||
# Hard-coded processor for easier use of CSRF protection.
|
# Hard-coded processor for easier use of CSRF protection.
|
||||||
_builtin_context_processors = ('django.template.context_processors.csrf',)
|
_builtin_context_processors = ('django.template.context_processors.csrf',)
|
||||||
|
|
||||||
|
_current_app_undefined = object()
|
||||||
|
|
||||||
|
|
||||||
class ContextPopException(Exception):
|
class ContextPopException(Exception):
|
||||||
"pop() has been called more times than push()"
|
"pop() has been called more times than push()"
|
||||||
@ -117,8 +119,11 @@ class BaseContext(object):
|
|||||||
|
|
||||||
class Context(BaseContext):
|
class Context(BaseContext):
|
||||||
"A stack container for variable context"
|
"A stack container for variable context"
|
||||||
def __init__(self, dict_=None, autoescape=True, current_app=None,
|
def __init__(self, dict_=None, autoescape=True,
|
||||||
|
current_app=_current_app_undefined,
|
||||||
use_l10n=None, use_tz=None, engine=None):
|
use_l10n=None, use_tz=None, engine=None):
|
||||||
|
if current_app is _current_app_undefined:
|
||||||
|
current_app = None
|
||||||
self.autoescape = autoescape
|
self.autoescape = autoescape
|
||||||
self.current_app = current_app
|
self.current_app = current_app
|
||||||
self.use_l10n = use_l10n
|
self.use_l10n = use_l10n
|
||||||
@ -176,7 +181,8 @@ class RequestContext(Context):
|
|||||||
Additional processors can be specified as a list of callables
|
Additional processors can be specified as a list of callables
|
||||||
using the "processors" keyword argument.
|
using the "processors" keyword argument.
|
||||||
"""
|
"""
|
||||||
def __init__(self, request, dict_=None, processors=None, current_app=None,
|
def __init__(self, request, dict_=None, processors=None,
|
||||||
|
current_app=_current_app_undefined,
|
||||||
use_l10n=None, use_tz=None, engine=None):
|
use_l10n=None, use_tz=None, engine=None):
|
||||||
Context.__init__(self, dict_, current_app=current_app,
|
Context.__init__(self, dict_, current_app=current_app,
|
||||||
use_l10n=use_l10n, use_tz=use_tz, engine=engine)
|
use_l10n=use_l10n, use_tz=use_tz, engine=engine)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user