Это решение, основанное на предыдущей версии ответа Джона Милликина, является более сложным, чем то, которое я принял, но я приведу его здесь для полноты. Сначала определите класс промежуточного программного обеспечения:
class AddBOMMiddleware(object):
def process_response(self, request, response):
import codecs
if getattr(response, 'bom', False):
response.content = codecs.BOM_UTF8 + response.content
return response
Добавьте его имя в MIDDLEWARE_CLASSES в ваших настройках. Затем переопределите render_to_response
:
def render_to_response(*args, **kwargs):
bom = kwargs.pop('bom', False)
httpresponse_kwargs = {'mimetype': kwargs.pop('mimetype', None)}
rendered = django.template.loader.render_to_string(*args, **kwargs)
response = django.http.HttpResponse(rendered, **httpresponse_kwargs)
if bom:
response.bom = True
return response
Теперь вы можете сделать render_to_response("foo.xml", mimetype="text/xml", bom=True)
, чтобы добавить спецификацию к конкретному ответу.