https://docs.djangoproject.com/en/2.1/topics/http/...
В справочной информации указано какая часть кода выполняется до, какая после
view.
Но ничего не сказано про то, как изменить сформированное содержимое страницы до её вывода после
view.
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
Вопрос, как обновить содержимое
request или
response, чтобы после
self.get_response(request) на странице выводились обновлённые
process_template_response данные?
Вырезка из кода:
my_middleware.py
class MyMiddleware(object):
def __init__(self, get_response=None):
if get_response is not None:
self.get_response = get_response
def __call__(self, request):
request.test_context = '1. __call__'
# print(request.test_context)
self.process_request(request)
response = self.get_response(request)
response = self.process_template_response(request, response)
return response
def process_request(self, request):
request.test_context += ' - 2. process_request'
# print(request.test_context)
def process_template_response(self, request, response):
request.test_context += ' - 4. process_template_response'
# print(request.test_context)
return response
views.py
def test_context(request):
request.test_context += ' - 3. view'
# print(request.test_context)
return render(request, 'my_app/test_context.html')
test_context.html
{{request.test_context}}
С помощью
print отслеживаю изменение переменной
request.test_context:
1. __call__
1. __call__ - 2. process_request
1. __call__ - 2. process_request - 3. view
1. __call__ - 2. process_request - 3. view - 4. process_template_response
Но на странице
html выводится:
1. __call__ - 2. process_request - 3. view
Что нужно исправить, чтобы на странице увидеть
1. __call__ - 2. process_request - 3. view - 4. process_template_response
вместо
1. __call__ - 2. process_request - 3. view
?
Версии:
Django==2.1
Python==3.7