Мой действующий сайт работает с использованием Python (3.6.7), Django (2, 1, 0, 'final', 0), Nginx (1.14.0 (Ubuntu)), Gunicorn (19.9.0) и Ubuntu(18.04.2 LTS).
Доступ к сайту вне iframe работает должным образом.Внутри iframe я получаю следующую ошибку при попытке перенаправления:
NoReverseMatch at /landing/
Reverse for '' not found. '' is not a valid view function or pattern name.
Настройка Iframe:
<iframe src="https://my-url/" ></iframe>
Настройка сайта в основном следует замечательному руководству Михала Карзинского (http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/).
Большинство вещей, которые я видел, ссылаются на промежуточное ПО в качестве потенциального решения для работы в iframes (https://docs.djangoproject.com/en/2.2/ref/clickjacking/). Это моя текущая установка промежуточного ПО в settings.py:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Я исключил представления, которые я хочу использовать в iframe, следуя предложенному подходу:
from django.http import HttpResponse
from django.views.decorators.clickjacking import xframe_options_exempt
@xframe_options_exempt
def ok_to_load_in_a_frame(request):
return HttpResponse("This page is safe to load in a frame on any site.")
Сайт работает в iframe при локальном обслуживании.
Ожидаемый результат - поведение в iframe будет таким же, как и при доступе к сайту из разрешенного домена.
Фактический результат в iframe - первоначальное представление загружается, но при попытке перенаправления происходит сбой со следующей ошибкойк любому другому представлению в iframe:
NoReverseMatch at /otherview/
Reverse for '' not found. '' is not a valid view function or pattern name.
Любое понимание приветствуется.
Обновление:
Я могу заставить iframe работать со следующими шагами:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
- Не обращайте внимания на добавление «@xframe_options_exempt» к представлениям.
Кто-нибудь знает, почему django версии 2.0.5 работает с этой конфигурацией и djangoверсии 2.1 нет?