@xframe_options_exempt не работает для представления/шаблона Django, который отображает iFrame?
Я отображаю iFrame на своем шаблоне, содержимое которого взято из локального .html
, который я загрузил в качестве медиафайла.
В настройках X_FRAME_OPTIONS = 'SAMEORIGIN'
у меня установлено разрешение на отображение содержимого, однако когда я запускаю проверку --check deploy
, я получаю следующее сообщение:
WARNINGS:
?: (security.W019) You have 'django.middleware.clickjacking.XFrameOptionsMiddleware' in your
MIDDLEWARE, but X_FRAME_OPTIONS is not set to 'DENY'. Unless there is a good reason for your site
to serve other parts of itself in a frame, you should change it to 'DENY'.
Кажется, что я должен держать это значение на DENY, когда я иду на производство, однако, делая это, мой iFrame "не может подключиться" для отображения содержимого.
Я прочитал документацию здесь, в которой говорится, что вы можете установить исключения на уровне представления, если вы установите значение DENY, однако у меня это не работает.
В функции view я пробовал использовать декораторы @xframe_options_sameorigin
и @xframe_options_exempt
, например:
# @xframe_options_sameorigin # Doesn't work
# @xframe_options_exempt # Also doesn't work
# Setting X_FRAME_OPTIONS = 'SAMEORIGIN'
# and use @xframe_options_deny also doesn't work
def work_detail(request, pk):
work = Work.objects.get(pk=pk)
context = {
'work': work
}
return render(request, 'work_detail.html', context)
...но все они по-прежнему не подключают iFrame. Что еще я могу попробовать?
Это не решает проблему, но в качестве обходного пути, вместо использования iframe
, я обнаружил это решение, которое сработало для меня в template.html
файле:
<div w3-include-html="{{ work.html.url }}"></div>
- Определите javascript поверх шаблона, но ниже
{% block page_content %}
.
- Добавить
<script>
includeHTML();
</script>
в самый низ страницы, но до {% endblock %}
.
4. Очистите кэш и перезапустите runserver. Я могу использовать это вместо iframe, но было бы неплохо узнать, почему исключения не работают так, как нужно?