0

I am unable to add a custom header to a response that is returned from render():

response = render(request, 'my_template.html', {'ctx1': 1, 'ctx2': 2})
response['My-Custom-Header'] = 'abc12345'

return response

This is a response to an Ajax request initiated using jQuery's $.get(). On Chrome, the response has the template rendered properly, but it does not have the custom header. If I print the response object before returning, I see that it has my custom header.

I thought the issue was because of this answer, so I added Django middleware to add a header to all responses:

class CustomHeaderMiddleware():
  def process_response(self, request, response):
    response['Access-Control-Expose-Headers'] = 'My-Custom-Header'
    return response

All my responses now have header Access-Control-Expose-Headers: My-Custom-Header, but I still see this issue.

My request is local; I'm using the Django development web server.

If I send a non-Ajax GET request, whatever custom header I add in Django is visible in the response on Chrome. So this issue seems to be limited to Ajax requests.

I am using Django 1.11.4 and Python2.

[edit]

If I capture the response in WireShark, I see that it does not have My-Custom-Header. Furthermore, if I add a custom header to the response dictionary in the above middleware, the header shows up in Wireshark and is visible in Chrome. So this seems to be a Django issue with responses to Ajax requests.

user2233706
  • 6,148
  • 5
  • 44
  • 86

1 Answers1

0

This issue is unrelated to Ajax. I was calling my view using this template tag. The custom response headers are lost because of line 32 in that code.

user2233706
  • 6,148
  • 5
  • 44
  • 86