2017-09-17 3 views
0

Ich bin nicht in der Lage einen benutzerdefinierten Header auf eine Antwort hinzuzufügen, die von render() zurückgegeben wird:kann nicht benutzerdefinierte Header Antwort hinzufügen

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

return response 

Dies ist eine Antwort auf eine Ajax-Anfrage, die unter Verwendung jQuery $.get(). In Chrome hat die Antwort die Vorlage richtig gerendert, aber sie verfügt nicht über die benutzerdefinierte Kopfzeile. Wenn ich das Objekt vor der Rückgabe drucke, sehe ich, dass es meine benutzerdefinierte Kopfzeile hat.

Ich dachte, das Problem wegen this answer war, so dass ich hinzugefügt Django Middleware einen Header zu allen Antworten hinzuzufügen:

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

Alle jetzt meine Antworten Access-Control-Expose-Headers: My-Custom-Header Header haben, aber ich dieses Problem weiterhin sehen.

Meine Anfrage ist lokal; Ich verwende den Django-Entwicklungs-Webserver.

Wenn ich eine Nicht-Ajax-GET-Anfrage sende, wird die benutzerdefinierte Kopfzeile, die ich in Django hinzufüge, in der Antwort in Chrome angezeigt. Dieses Problem scheint also auf Ajax-Anfragen beschränkt zu sein.

Ich verwende Django 1.11.4 und Python2.

[Bearbeiten]

Wenn ich die Antwort in Wireshark erfassen, sehe ich, dass es nicht My-Custom-Header hat. Wenn ich dem Antwortwörterbuch in der obigen Middleware einen benutzerdefinierten Header hinzufüge, wird der Header in Wireshark angezeigt und ist in Chrome sichtbar. Das scheint also ein Django-Problem mit Antworten auf Ajax-Anfragen zu sein.

Antwort

0

Dieses Problem hat nichts mit Ajax zu tun. Ich habe meine Ansicht mit this template tag aufgerufen. Die benutzerdefinierten Antwortheader sind wegen Zeile 32 in diesem Code verloren.

Verwandte Themen