Основываясь на ответе Неда Батчелдера, я составил решение. Хотя я не рекомендовал бы это ни для чего кроме отладки / устранения проблем. На связанной странице есть лучшее решение.
Поместить модуль m1
в корень проекта:
import inspect
def get_request():
for f in inspect.stack():
f_code = inspect.getmembers(f.frame, inspect.iscode)[0][1]
f_locals = [v for (n, v) in inspect.getmembers(f.frame) if n == 'f_locals'][0]
co_varnames = [v for (n, v) in inspect.getmembers(f_code) if n == 'co_varnames'][0]
if 'request' in co_varnames:
return f_locals['request']
Тогда в любом другом файле:
import m1
print(m1.get_response().path)
Возможно, вы захотите убедиться, что не вводите эталонных циклов . Я не понял, при каких условиях я должен делать что именно. Не то чтобы это имело значение в моем случае. Но ваш пробег может отличаться.